Перейти к содержимому
Compvision.ru
RinOS

APIDrawIpl на Delphi

Recommended Posts

IplImage To Bitmap;

Переделал функцию рисования IplImage для Delphi. Пользуйтесь ))

function WidthBytes(bits: Integer): Integer;

begin

Result := Trunc((bits + 31) / 32) * 4;

end;

function CreateRGBBitmap(Ipl: PIplImage): HBITMAP;

var

i, j: Integer;

LApp: PChar;

LBitInfo: TBitmapInfo;

begin

LBitInfo.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER);

LBitInfo.bmiHeader.biWidth := Ipl.width;

LBitInfo.bmiHeader.biHeight := Ipl.height;

LBitInfo.bmiHeader.biPlanes := 1;

LBitInfo.bmiHeader.biBitCount := 24;

LBitInfo.bmiHeader.biCompression := BI_RGB;

LBitInfo.bmiHeader.biSizeImage := WidthBytes(Ipl.width * 8) * Ipl.height;

LBitInfo.bmiHeader.biXPelsPerMeter := 0;

LBitInfo.bmiHeader.biYPelsPerMeter := 0;

LBitInfo.bmiHeader.biClrUsed := 0;

LBitInfo.bmiHeader.biClrImportant := 0;

Result := CreateDIBSection(0, LBitInfo, DIB_RGB_COLORS, Pointer(LApp), 0, 0);

if(Ipl.nChannels = 1) then

for i := 0 to Ipl.height - 1 do

for j := 0 to Ipl.width - 1 do

begin

LApp[Ipl.width*3*(Ipl.height-i-1)+j*3] := Ipl.imageData[Ipl.width*(i)+j];

LApp[Ipl.width*3*(Ipl.height-i-1)+j*3+1] := Ipl.imageData[Ipl.width*(i)+j];

LApp[Ipl.width*3*(Ipl.height-i-1)+j*3+2] := Ipl.imageData[Ipl.width*(i)+j];

end;

if Ipl.nChannels = 3 then

for i := 0 to Ipl.height - 1 do

Move(Pointer(Ipl.imageData+Ipl.width*3*i)^,

Pointer(LApp+Ipl.width*3*(Ipl.height-i-1))^, Ipl.width*3);

end;

procedure APIDrawIpl(X, Y: Integer; Handle: THandle; Ipl: PIplImage);

var

LMemDC, LHDC: HDC;

LBitmap: HBITMAP;

begin

LHDC := GetDC(Handle);

LMemDC := CreateCompatibleDC(LHDC);

LBitmap := CreateRGBBitmap(Ipl);

SelectObject(LMemDC, LBitmap);

BitBlt(LHDC, X, Y, Ipl.width, Ipl.height, LMemDC, 0, 0, SRCCOPY);

DeleteObject(LBitmap);

DeleteDC(LMemDC);

DeleteDC(LHDC);

end;

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×