Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

Добраться к пикселю иконки   Найти похожие ветки 

 
Tahion2   (2004-07-10 09:09) [0]

Дано: файл ICL с несколькимим форматами иконок в нутри (64*64, 48*48, 32*32б все по 32bpp и 24bpp).

Над этими иконками нужно выполнить определенные действия. Для этого нужно считать цвет каждого пикселя, изменить его и записать назад.

Как это сделать?


 
Tahion2   (2004-07-10 10:23) [1]

Ошибка: Дан не ICL, а ICO файл.


 
Алхимик ©   (2004-07-10 11:16) [2]

А не проще Имадж Эдитором из поставки Delphi нашлёпать все варианты нужных иконок и не усложнять себе жизнь?


 
Tahion2   (2004-07-10 13:24) [3]

Не подходит.
В редакторе иконок нужных вариантов нет.


 
Огромное Кулясищще ©   (2004-07-10 15:51) [4]

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_icons.asp
http://kainsk.tomsk.ru/g2003/sys26/oswin.htm


 
Tahion2   (2004-07-10 18:28) [5]

Кулясище, а у тебя нету примера из этих статей, переведенного на делфи?

Или какой другой готовый код, позволяющий добраться к пикселю?


 
Огромное Кулясищще ©   (2004-07-10 19:23) [6]

Прежде всего, нет специального кода, который добрался бы до пикселя. Суть - загрузить иконку (иконки в растр). Именно это и щем.

Первые ласточки:
http://community.borland.com/article/0,1410,16778,00.html
и пример, если надо:
http://www.developers.demon.co.uk/iconex.html

Проблемы могут быть с 48x48, но ещё раз отправляю на:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Resources/Icons/AboutI cons.asp


 
Tahion2   (2004-07-10 22:49) [7]

И еще вопрос: а откуда ты все знаешь про иконки?


 
Огромное Кулясищще ©   (2004-07-10 23:03) [8]

> И еще вопрос: а откуда ты все знаешь про иконки?

Книги, логика и поиск :)


 
Tahion2   (2004-07-11 17:18) [9]

я имею ввиду, что ты такого для иконок писал? Какую программу?


 
Огромное Кулясищще ©   (2004-07-11 19:17) [10]

Для иконок не писал. Но 32-битные изображения люблю.


 
Tahion2   (2004-07-12 13:52) [11]


> Прежде всего, нет специального кода, который добрался бы
> до пикселя. Суть - загрузить иконку (иконки в растр). Именно
> это и щем.
>
> Первые ласточки:
> http://community.borland.com/article/0,1410,16778,00.html
> и пример, если надо:
> http://www.developers.demon.co.uk/iconex.html


Это я уже делал. Получить 32-битную иконку в BMP - не проблема. Проблема перевести ее назад из BMP в 32-битную иконку. Более того, при этом нужно заменить все ее пикселы на свои.


 
Огромное Кулясищще ©   (2004-07-12 17:56) [12]

Те ссылки для того, чтобы разобраться в том, как загрузить из одного файла несколько иконок.

Если можешь загрузить, то значит и можешь сохранить.

http://www.awitness.org/delphi_pascal_tutorial/source2/icon_file_format.html
http://www.awitness.org/delphi_pascal_tutorial/source2/save_icon.html


 
Tahion2   (2004-07-12 18:48) [13]

http://www.awitness.org/delphi_pascal_tutorial/source2/icon_file_format.html

Ты не пробовал заставить в этом коде правильно работать альфаканал для 32bpp иконок?


 
Огромное Кулясищще ©   (2004-07-12 19:27) [14]

>Ты не пробовал заставить в этом коде правильно работать альфаканал для 32bpp иконок?

Нет, но почти всё готово:
см. procedure TForm1.ShowIconUserRoutine(w : Word);
и про то, как идёт работа с XOR (палитру сразу пропускаешь), а что делать с AND маской написано по прекрансому адресу, который жу звучал:

http://kainsk.tomsk.ru/g2003/sys26/oswin.htm

"Таким образом, мы полностью игнорировали растр маски при считывании данных из файла и при организации вывода изображения на экран монитора!"


 
Tahion2   (2004-07-13 14:49) [15]

Сделал так. Перед
 .....
 Image1.Picture.Icon.Handle:=CreateIconIndirect(IconInfo);

 WriteCalcToMemo(w);
 CloseFile(IconFile);

Вставил:
 blend.BlendOp:=AC_SRC_OVER;
 blend.BlendFlags:=0;
 blend.SourceConstantAlpha:=255;
 blend.AlphaFormat:=0; //$1;

 Bitmap:=TBitmap.Create;
 Bitmap.Height:=IconDirEntry[w].bHeight;
 Bitmap.Width:=IconDirEntry[w].bWidth;

 AlphaBlend(Bitmap.Canvas.Handle, 0, 0, IconDirEntry[w].bWidth, IconDirEntry[w].bHeight, Image2.Picture.Bitmap.Handle,
   0, 0, IconDirEntry[w].bWidth, IconDirEntry[w].bHeight, blend);

 Bitmap.SaveToFile("d:\2.bmp");
 Bitmap.Free;


Bitmap: TBitmap;
blend: _BLENDFUNCTION;

При открытии программы получаю:
Точка входа в процедуру AlphaBlend не найдена в дидлиотеке DLL gdi32.dll
Как это понимать?

****************************************************************
а что делать с AND маской написано по прекрансому адресу, который жу звучал:
http://kainsk.tomsk.ru/g2003/sys26/oswin.htm


1) Я почти не знаю Си, поэтому мне тяжело читать приведенный там код.
2) Я, даже, не все понимаю из того, что написано тут:
http://www.awitness.org/delphi_pascal_tutorial/source2/icon_file_format.html

Вывод: У меня тяжелый случай, доктор. :)

P.S. Напиши мне на tahion@ukrpost.net


 
Огромное Кулясищще ©   (2004-07-13 15:43) [16]

Да, случай тяжёлый. Ну ладно, попробуем разобраться, но мне нужно время. Вечером напишу.


 
Огромное Кулясищще ©   (2004-07-13 21:39) [17]

Занимаюсь этим делом.



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
8-1088879646
nolimit
2004-07-03 22:34
2004.10.03
flash в исполняемый файл


1-1095480561
Apl
2004-09-18 08:09
2004.10.03
Программа с манифестом XP не запускается


4-1093237731
Станислав
2004-08-23 09:08
2004.10.03
sendkeys


8-1089180064
Tahion2
2004-07-07 10:01
2004.10.03
Отобразить картинку в оттенках определенного цвета (Colorize)


1-1095448396
4МО
2004-09-17 23:13
2004.10.03
TaskBar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский