|
|
Регистрация | << Правила форума >> | 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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#18
|
|||
|
|||
Цитата:
1) Апринципиально ставить try?? Что произойдет/не произойдет, если его не поставить??? 2) зачем после bi ставить ^?? Это же служит для определения значения объекта, на который идет ссылка??? |
#19
|
||||
|
||||
1. Можешь конечно и не ставить, но... размер exe-файла от этого принципиально не изменится, а от разных, непредвиденных косяков убережёт.
2. bi : PBITMAPINFO - первая буква P, указывает на то, что это указатель на BITMAPINFO. P.S. Можешь всё переделать по-своему. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |