Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1217997524
Viod
2008-08-06 08:38
2008.09.14
Обратиться к объекту по имени хранящемся в строке


15-1216718835
dle
2008-07-22 13:27
2008.09.14
DataLife Engine Free


11-1193050704
DevilDevil
2007-10-22 14:58
2008.09.14
механизм MCK. как реализовать?


15-1216779181
Slider007
2008-07-23 06:13
2008.09.14
С днем рождения ! 23 июля 2008 среда


15-1216391681
shlst
2008-07-18 18:34
2008.09.14
Вирус напал необычный или что это вообще?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский