Lelik Lelikov Опубликовано 20 апреля, 2020 Поделиться Опубликовано 20 апреля, 2020 здравствуйте! помогите переписать функцию под 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; Цитата Ссылка на комментарий
Вопрос
Lelik Lelikov
здравствуйте! помогите переписать функцию под 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;
Ссылка на комментарий
0 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.