![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
|
|
#17
|
||||
|
||||
|
И что не получается?
Код:
var
Bitmap : TBitmap;
Bits : array of Byte;
...
var
bi : PBITMAPINFO;
begin
Bitmap := TBitmap.Create;
try
Bitmap.LoadFromFile('C:\000.bmp');
GetMem(bi, SizeOf(TBitmapInfo));
try
FillChar(bi^, SizeOf(TBITMAPINFO), 0);
with bi^.bmiHeader do
begin
biSize := SizeOf(TBITMAPINFOHEADER);
biWidth := Bitmap.Width;
biHeight := Bitmap.Height;
biPlanes := 1;
biBitCount := 24;
biCompression := BI_RGB;
end;
SetLength(Bits, Bitmap.Width * Bitmap.Height * (bi^.bmiHeader.biBitCount shr 3));
GetDIBits(Bitmap.Canvas.Handle, Bitmap.Handle, 0, Bitmap.Height, Bits, TBitmapInfo(bi^), DIB_RGB_COLORS);
finally
FreeMem(bi, SizeOf(TBitmapInfo));
end;
finally
Bitmap.Free;
end;
end; |
|
#18
|
|||
|
|||
|
Цитата:
1) Апринципиально ставить try?? Что произойдет/не произойдет, если его не поставить??? 2) зачем после bi ставить ^?? Это же служит для определения значения объекта, на который идет ссылка??? |
|
#19
|
||||
|
||||
|
1. Можешь конечно и не ставить, но... размер exe-файла от этого принципиально не изменится, а от разных, непредвиденных косяков убережёт.
2. bi : PBITMAPINFO - первая буква P, указывает на то, что это указатель на BITMAPINFO. P.S. Можешь всё переделать по-своему. ![]() |
|
#20
|
|||
|
|||
|
Цитата:
http://msdn.microsoft.com/en-us/libr...S.85%29.aspxне то поле заполнил Код:
ABitmap:=TBitmap.Create;
ABitmap.LoadFromFile('D:\тим\шаг\000.bmp');
ADC:=CreateCompatibleDC(0);
ZeroMemory(@ABitmapInfo.bmiHeader, SizeOf(TBitmapInfoHeader));
ABitmapInfo.bmiHeader.biSize:=SizeOf(TBitmapInfoHeader);
//--------------------------------------
abitmapinfo.bmiHeader.biClrUsed:=0;(*это поле нужно для битмапов с палитрой , а в вашем случае должен быть 0*)
//--------------------------------------
abitmapinfo.bmiHeader.biBitCount:=24;(* а нужно вот это*)
//--------------------------------------
abitmapinfo.bmiHeader.biWidth:=1000;
abitmapinfo.bmiHeader.biHeight:=750;
abitmapinfo.bmiHeader.biPlanes:=1;
abitmapinfo.bmiHeader.biSizeImage:=2250000;
abitmapinfo.bmiHeader.biClrImportant:=0;
//-------------------------------------------
(* здесь должно быть указано количество пикселей на дюйм*)
abitmapinfo.bmiHeader.biXPelsPerMeter:=96;(* по горизонтали *)
abitmapinfo.bmiHeader.biYPelsPerMeter:=96;(* и по вертикали *)
SetLength(lpvBits, 2250000);
GetDIBits(ADC, ABitmap.Handle, 0, 750, lpvBits, ABitmapInfo, DIB_RGB_COLORS);
// lpvBits: array [0..ABitmapInfo.bmiHeader.biSizeImage-1] of R, G, B; - условно
DeleteDC(ADC) ;
ABitmap.Free;чето я наверно не то рками делаю, массив из нулей((([/quote] |
|
#21
|
|||
|
|||
|
Цитата:
прям уличная магия))) все работает!!)) хотя я попробовал заменить bi на просто битмапинфо, но мне стал getmem ругаться когда я ему написал @bitmapinfo((( |
|
#22
|
|||
|
|||
|
а как обратно??? из массива в битмап?
|
|
#23
|
||||
|
||||
|
Уже писали выше: SetDIBits.
|