![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GetDIBits периодически ошибается
Vladimir Karpus © (2003-11-07 18:19:00)
Всем привет!
Есть код:
GetDIBits(MemDC0, bmapGraph.Handle, 0, HeightTo, nil, bmi, DIB_RGB_COLORS);
SetLength(arrImageTo1, bmi.bmiHeader.biSizeImage);
if GetDIBits(MemDC0, bmapGraph.Handle, 0, bmi.bmiHeader.biHeight, arrImageTo1, bmi, DIB_RGB_COLORS)=0 then
raise Exception.Create("GetDIBits:"#13#10+SysErrorMessage(GetLastError));
и этот код периодически вываливает ошибку "Нехватает памяти для выполнения команды."
Из-за чего GetDIBits может давать такую ошибку? Ведь размер массиву для захваченного изображения задается на строку выше..
Vladimir Karpus (2003-11-10 12:14:00) [1]
Вот почти полный код...
bmi: TBitmapInfo;
....
ZeroMemory(@bmi, SizeOf(bmi));
bmi.bmiHeader.biSize := SizeOf(TBitmapInfoHeader);
bmi.bmiHeader.biCompression :=BI_RGB;
bmi.bmiHeader.biBitCount := 24;
bmi.bmiHeader.biPlanes := 1;
bmi.bmiHeader.biSizeImage:=0;
bmi.bmiHeader.biWidth := WidthTo;
bmi.bmiHeader.biHeight := HeightTo;
arrImageTo1:=nil;
MemDC0 := CreateCompatibleDC(0);
GetDIBits(MemDC0, bmapGraph.Handle, 0, HeightTo, nil, bmi, DIB_RGB_COLORS);
SetLength(arrImageTo1, bmi.bmiHeader.biSizeImage);
if GetDIBits(MemDC0, bmapGraph.Handle, 0, bmi.bmiHeader.biHeight, arrImageTo1, bmi, DIB_RGB_COLORS)=0 then
raise Exception.Create("GetDIBits:"#13#10+SysErrorMessage(GetLastError));
Ricks (2003-11-08 21:59:00) [2]
А можно пополней. Что за MemDC0? И как ты получаеш "bmi" - tagBITMAPINFO?
miek (2003-11-08 21:43:00) [3]
В строчке с if попробуй писать аrrImageTo1[0]
Vladimir Karpus (2003-11-08 14:15:00) [4]
В том то и дело, что ошибка не зависит от размера картинки.
картинка 800*600 проходит, а на 500*400 может выкинуть ошибку, а может и не выкинуть...
Rog (2003-11-08 05:16:00) [5]
по-моему в справке написано, что нельзя большие куски выхватывать.
может быть у тебя большой кусок?