Zu 1.) Leider kenn ich mich mit dieser
Api nicht aus, aber eventuell musst di bei einer Farbkamera mehr speicher reservieren. Hast du denn mal ausgerechnet ob die Größe die du reservierst stimmt? Also bei 8Bit waeren das Breite*Hoehe, bei 16 (YUV) Breite*Hoehe*2 bei
RGB Breite*Hoehe*3.
zu 2.) Es kommt ganz darauf an was du spaeter mit den Daten machen willst. Wenn du diese dann sowieso komprimierst (z.b. JPEG) dann lohnt sich da z.B: LibJpegTurbo zu verwenden, dafür brauchst du noch nicht einmal ein Bitmap und z.B. fuer OpenCV glaub ich auch.
Ansonsten ist Scanline schnell genug und auch nicht wirklich langsamer als es direkt ueber die
API zu machen. Wichtig ist hier, dass du EINMAL das Bitmap erstellst und die Groesse + Pixelformat setzt und NICHT fuer jedes Bild. (Das gilt auch fuer den Speicher den du fuer das Bild reservierst).
Hier Beispiel fuer 8Bit:
Delphi-Quellcode:
// on Create
FBmp := TBitmap.Create;
FBmp.Width := 640; // Einstellungen der kamera
FBmp.Height := 480;
FBmp.PixelFormat := pf8Bit;
// on destroy
FreeAndNil(FBmp)
// Pro bild
var
y: integer;
begin
pmem := // dein datenpointer
for y := 0 to FBmp.Height-1 do
CopyMemory(FBmp.Scanline[y], Pointer(Integer(pmem) + FBmp.width * y), Fbmp.height);
Form1.Canvas.Draw(0,0,FBmp);
zu 3.
Die UniversalAPI bietet dir z.B. Moeglichkeiten ein Bild immer in
RGB auszulesen, egal welche Einstellung die Kamera hat. In den Manuals von AVT steht vieles beschrieben (z.B. Debayering etc)