Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

GetDiBits, где ошибка?

20K
10 октября 2006 года
magedon
2 / / 04.10.2006
Доброе время суток.

Вот код:

Код:
type
 RGB = packed record
   r: byte;
   g: byte;
   b: byte;
 end;
 TBitsmap = array of RGB;
var
 newBits : TBitsmap;
 oldBits : TBitsmap;

...

function GetBits(bmWork: TBitmap; var Bits : TBitsmap): boolean;
var
 bInfo : TBitmapInfo;
begin
 FillChar (bInfo, SizeOf(bInfo), 0);
 with bInfo.bmiHeader do
 begin
   biSize := SizeOf(bInfo);
   biWidth := wWidth;
   biHeight := -wHeight;
   biPlanes := 1;
   biBitCount := GetPixFormat(bmWork);
   biCompression :=  BI_RGB;
 end;
 GetDIBits(bmWork.Canvas.Handle,bmWork.Handle,0,wHeight,nil,bInfo,
             DIB_RGB_COLORS);
 SetLength(Bits,bInfo.bmiHeader.biSizeImage);
 Result := GetDIBits(bmWork.Canvas.Handle,bmWork.Handle,0,wHeight,Bits,bInfo,
             DIB_RGB_COLORS) > 0;
end;


вот так вызываю

 
Код:
if not GetBits(bmNew,newBits) then
     raise Exception.Create('Can''t create bits array from new bitmap'+
          #10#13+SysErrorMessage(GetLastError));

   if not GetBits(bmOld,oldBits) then
     raise Exception.Create('Can''t create bits array from old bitmap:'+
          #10#13+SysErrorMessage(GetLastError));


Создание и заполнение первого массива newBits происходит нормально.
А второго массива создание происходит но, он не заполняется
GetDIBits(bmWork.Canvas.Handle,bmWork.Handle,0,wHeight,Bits,bInfo,
DIB_RGB_COLORS) = 0;
Причем не заполняется всегда второй, если их поменять местами (первым заполнять oldBits), то не заполняется newBits.

Подскажите, пожайлуста, в чем загвоздка.
547
11 октября 2006 года
Hydra
488 / / 20.06.2006
Возможно косяк в
 
Код:
FillChar (bInfo, SizeOf(bInfo), 0);

Размер bInfo может быть больше sizeof(binfo): если у битмапа есть палитра, то размер увеличивается на 4*(к-во цветов), иначе больше на 12 байт. Вполне возможно без палитры он биты вернуть не может корректно.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог