Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
ВнизКонвертация bmp из ресурсов и иконку Найти похожие ветки
← →
demon © (2008-08-02 03:44) [0]В ресурсах есть bmp размером 16x96, как разделить её на 6 кусков 16х16 пикселов и сконвертировать каждый в icon?
← →
PZ (2008-08-02 09:00) [1]Загрузить в ImageList - разделится автоматически.
Преобразовать BMP > ICO, например:
http://softsearch.ru/programs/112-714-bmp-in-ico-download.shtml
← →
demon © (2008-08-02 14:54) [2]програма на 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 из резурсов и разрезать, подскажите как?
← →
demon © (2008-08-02 17:20) [3]Я сделал это так:
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;
Это грамотно? Может есть более эффективный способ?
← →
Сергей М. © (2008-08-02 17:52) [4]
> програма на API, ImageList не получиться
Какой нафих АПИ, если ты TIcon и TBitmap используешь ?)
← →
demon © (2008-08-02 18:24) [5]ну значит в программе нет визуальных компанентов.
Апи функции работают с TIcon и TBitmap, как без них вообще можно...
А по делу, код нормальный?
← →
@!!ex © (2008-08-02 18:29) [6]> ну значит в программе нет визуальных компанентов.
Ну так и 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; y<InfoHeader.biHeight; y++)
for (int x = 0; x<InfoHeader.biWidth; x++)
{
unsigned char r,g,b,a;
BMP->Read(&b,sizeof(b));
BMP->Read(&g,sizeof(g));
BMP->Read(&r,sizeof(r));
a = 0xFF;
*It = r;
It++;
*It = g;
It++;
*It = b;
It++;
*It = a;
It++;
};
return 0;
};
};
← →
Сергей М. © (2008-08-02 18:30) [7]
> значит в программе нет визуальных компанентов
TImageList не является визуальным компонентом.
> Апи функции работают с TIcon и TBitmap
Нет, не работают, не выдумывай небылиц.
> код нормальный?
Главное чтобы тебе нравился)
← →
@!!ex © (2008-08-02 18:42) [8]О.. хорошо что я здесь код выложил.. заодно косяк в нем нашел.. нехилый..
← →
{RASkov} © (2008-08-02 19:45) [9]> [8] @!!ex © (02.08.08 18:42)
Называется: Поделился косяком со всеми...)
← →
@!!ex © (2008-08-02 20:13) [10]> [9] {RASkov} © (02.08.08 19:45)
Ну так код же, просто как пример, чт с Битмапами можно работать без TBItmap. :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c