Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
4-1093109098
AlexV
2004-08-21 21:24
2004.10.03
Label, независимый от размера шрифта в настр-ах Windows ...


1-1095316993
Чайник
2004-09-16 10:43
2004.10.03
Перелив цветов


14-1095248996
NewDelpher
2004-09-15 15:49
2004.10.03
Перестала запускаться DELPHI


3-1094167004
O l e g
2004-09-03 03:16
2004.10.03
Переполнение стека, что это?


8-1089442347
Andrew
2004-07-10 10:52
2004.10.03
Как нарисовать на канвасе Bitmap вращающуюся спираль?