|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.02.2007, 00:56 | #1 |
Пользователь
Регистрация: 18.02.2007
Сообщений: 10
|
Иконки в TImageList с цветовыми переходами
У меня есть картинки, которые мне нужно поместить в качестве иконок в TImageList. ПРоблема в том, что эти картинки подогнаны под один конкретный цвет фона, и при изменении фона на другой они становятся до бессмысленности некрасивыми. Таким образом, если у юзера цвета Windows отличаются от моих, такие иконки у него будут выглядеть фигово. Насколько я понял, иконки можно делать, чтобы они самостоятельно автоматически адаптировались к текущему цвету фона, т.е. чтобы у них области, сглаживающие переход от границ основного содержимого каринки к её фону (т.е. к областям с прозрачным цветом), автоматически изменялись в цвете в зависимости от текущего цвета фона (например, так сделаны системные иконки, которые видны в проводнике). Кто мне скажет, как и чем это делается - у ImageEditor Delphi7 я таких возможностей обнаружить не смог.
Попутный вопрос - я выдираю иконку из системного ImageList, загоняю её в TImage (методом TImageList.GetIcon), и она чудесным образом отображается с сохранением этой самой автоматической адаптации к цвету фона. НО при попытке сохранения иконки в файл (методом TImage.Picture.Icon.SaveToFile) она сохраняется в 16-ти цветовой палитре, хотя на экране отображается как минимум в 256-цветной палитре. Как сохранить чёртову иконку в файл, чтобы она сохранилась в оригинальном виде? Большая просьба, если вдруг вам есть что ответить на эти вопросы - не используйте программёрский слэнг - я не профессиональный программист, вряд ли вас пойму. Попроще, поподобней, пожалуйста. |
19.02.2007, 10:55 | #2 |
Форумчанин
Регистрация: 15.02.2007
Сообщений: 183
|
Слушай у иконки нет свойства прозрачночти фона? Просто необходимо по сути сделать так, чтобы фон иконки не использовался вообще, т.е. прозрачность установить полную и таким образом иконка будет всегда на том фоне какой стоит у юзера на раб столе. И вопрос: ты иконку выдираешь откуда, с неба что ли? Иконка уже сохранена, не понимаю что мешает её использовать. И сохранять в отдельный файл, что-то смысла не вижу, раскажи что ты хочешь сделать?
Знать все невозможно, в силу того, что жить бы стало неинтересно.
|
20.02.2007, 00:47 | #3 |
Пользователь
Регистрация: 18.02.2007
Сообщений: 10
|
Долматову
Спосибо за попытку помочь, А. Долматов. Я наверно не очень точно сформулировал вопрос, потому его трудно понять.
1) У меня нет готовых иконок, у меня есть картинки, каковые я хочу превратить в иконки и добавить в TImageList. Прозрачный цвет я задать могу - это не проблема, но у иконок кроме этого явно существует другая прилада - что-то вроде областей полупрозрачности, с помощью которых обеспечивается плавный переход от непрозрачных областей иконки к полностью прозрачным - благодоря этому при изменении цвета фона, на который наложена иконка, и соответсвенно каковой виден в её прозрачных местах, иконка всё равно смотрится красиво. Без этого эффекта при смене фона например с белого на чёрный, у иконки, нарисованной только для светлого фона, сразу появились бы резкие границы между фоном и непрозрачными областями, что фатально скажется на её внешнем виде - из красивой она превратится в идиотскую. Так как юзер теоретически может установить например и белый фон и чёрный в качестве цвета оконных элементов Windows, без эффекта подобной полупрозрачности становиться бессмысленным использовать иконки с картинками сложных форм, требующих сглаживания (плавного перехода) на цвет фона (окружностями, тругольниками со слишком острыми или слишком тупыми углами и т.д.) . Откуда я знаю, что эффект полупрозрачности или что-то подобное можно задавать у иконок - я наблюдаю это у иконок файлов, видимых в проводнике. 2) Что до сохранения иконки в файл - иконку я беру из системного ImageList - это не мой ImageList, он принадлежит системе, т.е. Windows, а не моей программе, из него можно получать иконки файлов и папок. Так что самих иконок у меня нет - я хотел выдернуть одну иконку из системнго ImageList, сохранить её в файл, и посомтреть, каким образом достигается в ней эффект полупрозрачности. Выдернуть то я её выдернул, но не могу почему-то сохранить её в оригирнальном виде в файл - сохраняется сволочь в 16-ти цветной палитре, хотя на экране отображается минимум в 256-цветной. Пример, как обеспечить доступ к системному ImageList: Сначала нужно положить на форму компонент TImageList, затем выполнить следующий код: ImageList1.Handle:= SHGetFileInfo('C:\', 0, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON); Однако этот ImageList окажется пуст, чтобы в нём появились иконки файлов и папок, необходимо вызыватьфункцию SHGetFileInfo для каждого типа файла или папки, иконку которой нужно получить, например: var S:String; var MyFlags:Integer; S:= 'C:\music\pesnia1.mp3'; MyFlags:= (SHGFI_SYSICONINDEX or SHGFI_SMALLICON or SHGFI_DISPLAYNAME); SHGetFileInfo(PChar(S),0,FileInfo,S izeOf(FileInfo),MyFlags); После этого иконка файла pesnia1.mp3, (т.е. иконка файлов типа mp3) будет добавлена в ImageList1. (за основу примера взят код демонстрационного проекта “Virtual ListView”, входящего в состав дистрибутива Delphi5) |
17.11.2007, 19:22 | #4 |
Новичок
Джуниор
Регистрация: 17.11.2007
Сообщений: 1
|
Интересно было бы узнать как вы решили эту проблему?
Возможно существует наследник TImageList с возможностью использовать иконки в формате png... уж у PNG есть альфа-канал позволяющий использовать полупрозрачность, в отличие от ICO и GIF насколько я понимаю Всмысле, что TImageList не умеет работать с 32-битными иконками у которых есть альфа канал... а он их автоматически режет до 24-бит, буть то ICO или еще какой. ----------------------------------------- Нашел тут вариант PngComponents... там есть компонент PngImageList, по-моему он решает проблему Последний раз редактировалось Hrumtik; 17.11.2007 в 20:18. |
17.11.2007, 20:48 | #5 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
Код:
Последний раз редактировалось mihali4; 17.11.2007 в 21:29. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
timage and timagelist | RealSHELS | Общие вопросы Delphi | 3 | 07.01.2012 08:00 |
Иконки | Killbrum | Свободное общение | 9 | 18.08.2008 01:00 |
TImageList | Никки | Компоненты Delphi | 5 | 03.08.2008 08:38 |
Иконки | Патрон | Общие вопросы Delphi | 4 | 01.04.2008 14:07 |
иконки | MAcK | Общие вопросы Delphi | 1 | 17.11.2006 15:56 |