|
#1
|
|||
|
|||
BMP в ICO
Доброго времени суток. Подскажите плз кто знает, как из TBitmap записать рисунок в *.ico-файл?
|
#2
|
||||
|
||||
Создай TIcon и перересуй на него твой TBitmap, в сети примеров - выше крыши.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
Дело в том, что TIcon поддерживает только 16 цветов. Т.е. цветность обрезается. А мне нужно делать 32 и 24 битные иконки (в зависимости от наличия альфа-канала).
|
#4
|
|||
|
|||
Есть API функция CreateIconIndirect
|
#5
|
||||
|
||||
Нашел тут на просторах своего HD, может поможет
Как создать ICO из BMP -------------------------------------------------------------------------------- Нужно создать два bitmap'а: bitmap-маску ("AND" bitmap) и bitmap-картинку (XOR bitmap). Потом передать дескрипторы "AND" и "XOR" bitmap-ов API функции CreateIconIndirect(): Код:
procedure TForm1.Button1Click(Sender: TObject); var IconSizeX: integer; IconSizeY: integer; AndMask: TBitmap; XOrMask: TBitmap; IconInfo: TIconInfo; Icon: TIcon; begin {Get the icon size} IconSizeX := GetSystemMetrics(SM_CXICON); IconSizeY := GetSystemMetrics(SM_CYICON); {Create the "And" mask} AndMask := TBitmap.Create; AndMask.Monochrome := true; AndMask.Width := IconSizeX; AndMask.Height := IconSizeY; {Draw on the "And" mask} AndMask.Canvas.Brush.Color := clWhite; AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY)); AndMask.Canvas.Brush.Color := clBlack; AndMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4); {Draw as a test} Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask); {Create the "XOr" mask} XOrMask := TBitmap.Create; XOrMask.Width := IconSizeX; XOrMask.Height := IconSizeY; {Draw on the "XOr" mask} XOrMask.Canvas.Brush.Color := ClBlack; XOrMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY)); XOrMask.Canvas.Pen.Color := clRed; XOrMask.Canvas.Brush.Color := clRed; XOrMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4); {Draw as a test} Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask); {Create a icon} Icon := TIcon.Create; IconInfo.fIcon := true; IconInfo.xHotspot := 0; IconInfo.yHotspot := 0; IconInfo.hbmMask := AndMask.Handle; IconInfo.hbmColor := XOrMask.Handle; Icon.Handle := CreateIconIndirect(IconInfo); {Destroy the temporary bitmaps} AndMask.Free; XOrMask.Free; {Draw as a test} Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon); {Assign the application icon} Application.Icon := Icon; {Force a repaint} InvalidateRect(Application.Handle, nil, true); {Free the icon} Icon.Free; end; Понять, что хочет заказчик - бесценно, ведь он платит MasterCard |
#6
|
|||
|
|||
Imikle, можно поподробнее? Может пример есть?
|
#7
|
|||
|
|||
cotseec, смотрел такой пример. Здесь Icon типа TIcon. Т.е. когда делаем Icon.Handle := CreateIconIndirect(IconInfo); - у нас иконка получается 16-ти цветная
|
#8
|
||||
|
||||
посмотри еще вот эти вырезки (приложил к коменту), в свое время пытался сделать то же самое (BMP в ICO), но исходники того, что у меня получилось потерялись безвозвратно
Понять, что хочет заказчик - бесценно, ведь он платит MasterCard |
#9
|
|||
|
|||
http://janych.selfip.com/examples/Delphi/Icons/
Посмотри тут, надеюсь поможет |
#10
|
|||
|
|||
Цитата:
|
#11
|
|||
|
|||
Я например целый год над этим бился и в конце концов
http://www.softtelecom.ru/algreg.htm часть исходников из Graphic Conveyer 2.5 |
#12
|
|||
|
|||
Цитата:
Должна получаться truecolor, если битмапы truecolor. Только сохранить в файл эту иконку в Делфи не получится, так как нет там нормальной процедуры сохранения. Можно сохранить иконку так. Там же можно посмотреть, как иконки делаются, можно в конце концов записать иконку в Stream и прочитать оттуда LoadFromStream. Загружаются иконки вроде бы нормально. |