Главная страница
    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
11-1193050704
DevilDevil
2007-10-22 14:58
2008.09.14
механизм MCK. как реализовать?


2-1217517420
self.name
2008-07-31 19:17
2008.09.14
insert в TFileStream


11-1192822029
Вячеслав
2007-10-19 23:27
2008.09.14
Высоту списка в ComboBox?


15-1216734281
VirEx
2008-07-22 17:44
2008.09.14
Дизайн детей (не дали договорить)


15-1216979977
Jolik
2008-07-25 13:59
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский