Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2009, 19:41   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
Печаль Помогите с createIcon!

Доброго времени суток, уважаемые форумчане!
Я не знал, где точно разместить эту тему, поэтому решил здесь...

Процесс создания иконки я представляю себе так:
Берётся картинка (bitmap), как маска AND

а прозрачность пикселей подбирается по цвету соответствующего пикселя на маске XOR

Цвет чёрный - прозрачность 255, белый - 0, серый - 127.


Для создания иконки я использую createIcon в следующем виде:
Код:
var
i: tIcon;
h: tHandle;
image, mask: tBitmap;
begin
   image := tBitmap.Create;
   image.LoadFromFile(path+'AND.bmp');
   mask := tBitmap.Create;
   mask.LoadFromFile(path+'XOR.bmp');

   h := createIcon(hInstance, 32, 32, 1, 1, image, mask);
   i := tIcon.Create;
   i.Handle := h;
   canvas.Draw(100, 100, i);
end;
Но прорисовывается на форме какая-то белибердовая картинка чёрного цвета и несколькими прозрачными участками. Подскажите, как быть?
Altera вне форума Ответить с цитированием
Старый 15.02.2009, 20:45   #2
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

попробуй так:
Код:
mask .Monochrome := true;
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 15.02.2009, 21:04   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от 0nni Посмотреть сообщение
попробуй так:
Код:
mask .Monochrome := true;
Лучше не стало....
Altera вне форума Ответить с цитированием
Старый 15.02.2009, 21:16   #4
TaTT DoGG
Форумчанин
 
Аватар для TaTT DoGG
 
Регистрация: 25.04.2008
Сообщений: 476
По умолчанию

попробуй в качестве прозрачного в bmp использовать розовый цвет
Life if about choices
Make the right choice
TaTT DoGG вне форума Ответить с цитированием
Старый 15.02.2009, 21:20   #5
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Код:
var
  i: tIcon;
  h: tHandle;
  image, mask : Cardinal;
  andInfo, xorinfo : tagBITMAP;
  andbuff, xorbuff : array of byte;
  IconInfo : TIconInfo;
begin
   image := LoadImage(0, 'C:\and.bmp', IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE or LR_COLOR);
   mask := LoadImage(0, 'C:\xor.bmp', IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE or LR_MONOCHROME);

   ZeroMemory(@IconInfo, sizeof(TIconInfo));
   IconInfo.fIcon := true;
   IconInfo.hbmMask := mask;
   IconInfo.hbmColor := image;
   h := CreateIconIndirect(IconInfo);
   DrawIcon(Canvas.Handle, 0, 0, h);

DeleteObject(image );
DeleteObject(mask);
//DestroyIcon(h); - не забудь!!!!
Вроде этого.

кстати, обрати внимание:
Код:
HICON CreateIcon(

    HINSTANCE hInstance,	// handle to application instance
    int nWidth,	// icon width
    int nHeight,	// icon height
    BYTE cPlanes,	// number of planes in XOR bitmask
    BYTE cBitsPixel,	// number of bits per pixel in XOR bitmask
    CONST BYTE *lpbANDbits,	// pointer to AND bitmask array
    CONST BYTE *lpbXORbits 	// pointer to XOR bitmask array
   );
Сказал и загрустил от бесспорности своей правоты.

Последний раз редактировалось 0nni; 15.02.2009 в 21:28.
0nni вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц