здравствуйте! помогите переписать функцию под fmx.
проблема с:
Assert(bitmap.PixelFormat in [pf24bit, pf32bit]);
и
BytesPerScanLine
function BitmapToIplImage(const bitmap:
{$IFDEF DELPHIXE2_UP}Vcl.Graphics.TBitmap{$ELSE}Graphics.TBitmap{$ENDIF}): PIplImage;
Var
BMI: BITMAPINFO;
MemDC: HDC;
DS: TDIBSection;
Bytes: Integer;
begin
Assert(bitmap.PixelFormat in [pf24bit, pf32bit]); // only 24bit or 32bit
ZeroMemory(@BMI, SizeOf(BMI));
Bytes := GetObject(bitmap.Handle, SizeOf(DS), @DS);
Assert(Bytes <> 0, 'InvalidBitmap');
with bitmap, BMI.bmiHeader, DS.dsbm do
begin
biSize := SizeOf(BMI);
biWidth := Width;
biHeight := -Height;
biPlanes := 1;
biBitCount := bmBitsPixel * bmPlanes;
biSizeImage := BytesPerScanLine(biWidth, biBitCount, 32) * Abs(biHeight);
end;
Result := cvCreateImage(cvSize(bitmap.Width, bitmap.Height), IPL_DEPTH_8U, BMI.bmiHeader.biBitCount div 8);
MemDC := CreateCompatibleDC(0);
SelectObject(MemDC, bitmap.Handle);
GetDIBits(MemDC, bitmap.Handle, 0, bitmap.Height, Result^.ImageData, BMI, DIB_RGB_COLORS);
DeleteDC(MemDC);
end;