![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Конвертация 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