Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.03.2017, 17:12
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию 4 bit HBitmap

Здравия всем!

Столкнулся с некоторой проблемкой при работе с HBitmap;
Использую WinAPI. Суть - Не могу сделать SelectObject на 4 битный битмап.
Использую именно 4 битный, т.к. графические данные подготовлены в 16 цветной индексированной палитре, поэтому переводить в 32 бит - затратно для производительности приложения.

Вот пример использования:
Код:
Const
data2: array[0..63] of byte = (
	$00, $00, $00, $00, $01, $00, $01, $00, $41, $00, $71, $00, $55, $00, $7C, $00,
  $00, $00, $00, $00, $01, $00, $01, $00, $41, $00, $71, $00, $55, $00, $7C, $00,
  $00, $00, $00, $00, $01, $00, $01, $00, $41, $00, $71, $00, $55, $00, $7C, $00,
  $00, $00, $00, $00, $01, $00, $01, $00, $41, $00, $71, $00, $55, $00, $7C, $00
);
...

procedure TForm1.Button1Click(Sender: TObject);
var
HDC:THandle;
BufferImages:HBitmap;
BDC:THandle;
Select:LongWord;
begin
Image1.Picture.Bitmap.Width:=8;
Image1.Picture.Bitmap.Height:=8;
HDC:=Image1.Picture.Bitmap.Canvas.Handle;
BufferImages:=CreateBitmap(8,8,1,4,@data2); //??? 
BDC:=CreateCompatibleDC(HDC);
Select:= SelectObject(BDC,BufferImages);
if Select =0 then ShowMessage('Selected error');
BitBlt(HDC,0,0,8,8,BDC,0,0,SRCCOPY);
ReleaseDC(BDC,BufferImages);
DeleteDC(BDC);
DeleteObject(BufferImages);

end;
Вот почему, если я создаю
CreateBitmap(8,8,1,1,@data2) - то нормально, а если:
CreateBitmap(8,8,1,4,@data2) - то SelectObject = 0 и соответственно на контексте ничего. Аналогичная ошибка при 8, 16 битах, а 32 понятно норм.
При этом сам CreateBitmap возвращает идентификатор в любом случае.
а установка
Код:
Image1.Picture.Bitmap.PixelFormat:=pf4bit;
ничего не даёт;

Пробовал использовать CreateDIBSelection, SetDIBits, StretchDiBits - не помогает.
SetDIBits и StretchDiBits что-то пытаются, но слишком геморно.

Собственно вопрос как отрисовать 4 битный битмап (на 32 битном контексте)?
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter