Форум: "WinAPI";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];
ВнизЗаполнить структуру BITMAPFILEHEADER Найти похожие ветки
← →
SPeller (2002-09-04 10:39) [0]Всем доброго времени суток! Как правильно вычислить значение поля bfOffBits структуры BITMAPFILEHEADER, имея заполненную структуру BITMAPINFO и следующие за ней графические данные ??
Вот текстт процедуры в которой что-то не так делается. Знаю что не могу правильно прикрутить BITMAPFILEHEADER.
procedure TForm1.Button1Click(Sender: PObj);
var hFile, hBl, hRes, rSize, tm: cardinal; pf: pointer; bfh: TBITMAPFILEHEADER;
bih: PBITMAPINFOHEADER;
begin
hbl:=FindResource(hInstance, "FRMMAIN_IMAGELIST1", RT_BITMAP );
if hbl=0 then begin
ShowMessage("Can""""t find resource.");
exit;
end;
rSize:=SizeOfResource(hInstance, hbl);
hRes:=LoadResource(hInstance, hbl);
if hRes=0 then begin
ShowMessage("Can""""t load resource");
exit;
end;
pf:=LockResource(hres);
hfile:=CreateFile("C:\tmres.bmp", GENERIC_WRITE or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);
bih:=pf;
bfh.bfType:=$424D;
bfh.bfSize:=rSize+SizeOf(bfh);
bfh.bfReserved1:=0;
bfh.bfReserved2:=0;
if bih.biBitCount > 8 then tm:=0 else tm:=round(exp(bih.biBitCount*ln(2)))*SizeOf(RGBQUAD);
bfh.bfOffBits:=SizeOf(bfh) + SizeOf(bih^)+ tm -1;
tm:=0;
_WriteFile(hFile, @bfh, SizeOf(bfh), tm, 0);
hbl:=Cardinal(_WriteFile(hFile, pf, rsize, tm, 0));
if hbl=0 then ShowMessage("Writing failed");
CloseHandle(hFile);
FreeResource(hRes);
end;
← →
SPeller (2002-09-04 11:23) [1]ЗЫ: Объявление _WriteFile такое:
function _WriteFile(hFile: cardinal; Buffer:pointer; BytesToWrite: cardinal; var BytesWritten: cardinal; lpOverlapped: cardinal): BOOL; stdcall;external kernel32 name "WriteFile";
← →
Игорь Шевченко (2002-09-04 11:36) [2]graphics.pas - TBitmap.WriteStream - может, натолкнет на какие-то идеи ?
← →
Tihas (2002-09-04 19:49) [3]Ну зачем ты всё измеряешь SizeOf. Думаю ты знаешь, что
размер заголовка в любом битмепе весит 54 байта, типер
остоёться вычислить размер палитры,
Если case bfOffBits of
1:s:=2;
4:s:=16;
8:s:=256;
16,24,32:s:=0;
end;
result:=4*s+54;
Вот и всё.
Удачи.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c