Also ich verstehs echt nicht...
Habs jetzt mal wie jfheins gemacht:
Delphi-Quellcode:
form2.Image1.Picture.Bitmap.PixelFormat := APixelFormat; //-> pf32Bit
for h := 0 to 240 - 1 do
begin
a := form2.Image1.picture.bitmap.ScanLine[h];
b := form3.imgBuffer.Picture.Bitmap.ScanLine[h];
for w := 0 to 320 - 1 do
begin
a^ := b^;
if form3.netz.input[(h*320)+w].nettoinput <> 0 then
a^.rgbRed := $FF;
inc(a);
inc(b);
end;
end;
--> Selbes Ergebnis
Achso die Funktion, die mir das Bild captured sieht so aus, vielleicht bringt das ja was:
Codierung nennt sich I420.
Delphi-Quellcode:
function FrameCallbackFunction(AHandle : hWnd; VIDEOHDR : TVideoHDRPtr): bool; stdcall;
var I : integer;
BitmapInfo: TBitmapInfo;
begin
result := true;
if not grab then
Exit;
FillChar(BitmapInfo, SizeOf(BitmapInfo), 0);
SendMessage(capHandle, WM_CAP_GET_VIDEOFORMAT, SizeOf(BitmapInfo), Integer(@BitmapInfo));
ConvertCodecToRGB(BICompressionToVideoCodec(bitmapinfo.bmiHeader.biCompression), VideoHDR^.lpData, @Buf2,320, 240);
for I := 1 to 240 do
Buf1[I] := Buf2[240 -(I-1)];
SetBitmapBits(bmpBuffer.Handle,320*240*SizeOf(DWord),@Buf1);
grab := false;
end;
Es gibt noch ne RGB24 Codierung, allerdings weiß ich nicht was ich dazu in die Callback-Function schreiben muss.
Philipp F.