Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Конвертация bmp из ресурсов и иконку


demon ©   (2008-08-02 03:44:00) 

В ресурсах есть bmp размером 16x96, как разделить её на 6 кусков 16х16 пикселов и сконвертировать каждый в icon?


@!!ex   (2008-08-02 20:13:00) [1]

> [9] {RASkov} ©   (02.08.08 19:45)

Ну так код же, просто как пример, чт с Битмапами можно работать без TBItmap. :)


{RASkov}   (2008-08-02 19:45:00) [2]

> [8] @!!ex ©   (02.08.08 18:42)

Называется: Поделился косяком со всеми...)


@!!ex   (2008-08-02 18:42:00) [3]

О.. хорошо что я здесь код выложил.. заодно косяк в нем нашел.. нехилый..


Сергей М.   (2008-08-02 18:30:00) [4]


> значит в программе нет визуальных компанентов


TImageList не является визуальным компонентом.


> Апи функции работают с  TIcon и TBitmap


Нет, не работают, не выдумывай небылиц.


> код нормальный?


Главное чтобы тебе нравился)


@!!ex   (2008-08-02 18:29:00) [5]

> ну значит в программе нет визуальных компанентов.

Ну так и ImageList можно не визуальный сделать.


> Апи функции работают с  TIcon и TBitmap, как без них вообще
> можно...

Легко. Вот загрузка BMP(грузит только 24 битные BMP без сжатия, преобразует в RGBA и отдает данные) на API:
int GetBMPData(std::string FileName,void* Data, unsigned int &Width, unsigned int &Height) //if Data==NULL return DataSize
{
cFile* BMP = new cFile(FileName,READ);
BITMAPFILEHEADER FileHeader;
BITMAPINFOHEADER InfoHeader;
BMP->Read(&FileHeader,sizeof(FileHeader));
BMP->Read(&InfoHeader,sizeof(InfoHeader));
if (Data==NULL)
{
 delete BMP;
 Width = InfoHeader.biWidth;
 Height = InfoHeader.biHeight;
 return InfoHeader.biWidth*InfoHeader.biHeight*4;
}
else
{
 assert(Width==InfoHeader.biWidth && Height==InfoHeader.biHeight && InfoHeader.biBitCount==24);
 char* It = (char*)Data;
 for (int y = 0; yRead(&g,sizeof(g));
   BMP->Read(&r,sizeof(r));
   a = 0xFF;
   *It = r;
   It++;
   *It = g;
   It++;
   *It = b;
   It++;
   *It = a;
   It++;
  };
 
 return 0;
};
};


demon   (2008-08-02 18:24:00) [6]

ну значит в программе нет визуальных компанентов.
Апи функции работают с  TIcon и TBitmap, как без них вообще можно...

А по делу, код нормальный?


Сергей М.   (2008-08-02 17:52:00) [7]


> програма на API, ImageList не получиться


Какой нафих АПИ, если ты TIcon и TBitmap используешь ?)


demon   (2008-08-02 17:20:00) [8]

Я сделал это так:

 AndMask := TBitmap.Create;
 AndMask.Monochrome := true;
 AndMask.Width  := 16;
 AndMask.Height := 16;
 AndMask.Canvas.Brush.Color := clBlack;
 AndMask.Canvas.FillRect(Rect(0, 0, 16, 16));

 TempBitmap := TBitmap.Create;
 TempBitmap.Handle := LoadBitmap(hInstance, 'TRAYICONS');

 XOrMask := TBitmap.Create;
 XOrMask.Width  := 16;
 XOrMask.Height := 16;

 numberIcon:=1;
 XOrMask.Canvas.CopyRect(rect(0,0,16,16),tempBitmap.Canvas,rect(numberIcon*16,0,n umberIcon*16+16,16));

 Icon := TIcon.Create;
 IconInfo.fIcon := true;
 IconInfo.xHotspot := 0;
 IconInfo.yHotspot := 0;
 IconInfo.hbmMask := AndMask.Handle;
 IconInfo.hbmColor := XOrMask.Handle;
 Icon.Handle := CreateIconIndirect(IconInfo);

 Application.Icon := Icon;
 InvalidateRect(Application.Handle, nil, true);

 AndMask.Free;
 XOrMask.Free;
 Icon.Free;

Это грамотно? Может есть более эффективный способ?


demon   (2008-08-02 14:54:00) [9]

програма на API, ImageList не получиться.

Преобразовывать буду так:
 Icon := TIcon.Create;
 IconInfo.fIcon := true;
 IconInfo.xHotspot := 0;
 IconInfo.yHotspot := 0;
 IconInfo.hbmMask := AndMask.Handle;
 IconInfo.hbmColor := XOrMask.Handle;
 Icon.Handle := CreateIconIndirect(IconInfo);

Осталось только загрузить BMP из резурсов и разрезать, подскажите как?


PZ   (2008-08-02 09:00:00) [10]

Загрузить в ImageList - разделится автоматически.
Преобразовать BMP > ICO, например:
http://softsearch.ru/programs/112-714-bmp-in-ico-download.shtml


Наверх

Титульная страница Поиск, карта сайта Написать письмо