| Autor |
Beitrag |
shadowdancer2k
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 19.10.04 15:10
Hallo.
Ich versuche über eine USB Webcam und deren Treiberbibliothek einen AVI Frame abzuholen und diesen Frame als TBitmap darzustellen.
Das Abholen des Frames ist gelungen und er liegt als unkomprimiertes DIB Format im Speicher, aber mir gelingt die Umwandlung und Darstellung als TBitmap nicht. Vielleicht kann mir da ja einer helfen. Wäre klasse.
|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Sa 23.10.04 20:53
Hallo,
ich hab so was zugegeben noch nie gemacht, aber schau dir mal den Befehl CreateDIBSection() an. du hast ja sicher die Pixeldaten als Pionter und die wichtigsten Infos wie Breite, Höhe, Pixelformat? Dann dürfte der Befehl ausreichen. Gibt ein HBITMAP zurück, das weist du ganz einfach TBitmap.Handle zu.
Weiß nur net ob du net vorher irgendwie den Speicherinhalt des TBitmap freigeben soltlest wegen Speicherverschwendung und so. Gehen tuts aber auch so 
_________________ Life is a bad adventure, but the graphic is really good!
|
|
shadowdancer2k 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 01.11.04 12:18
Ja danke,
das hilft mir schon sehr viel weiter!
Hätte da aber noch ein anderes Problem, das dem vorangeht.
Wie kann ich denn in einer Funktion einen Pointer aud long festlegen?
Geht das überhaupt, oder muss ich das ausserhalb der Funktion machen?
|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Mo 01.11.04 14:50
Hallo,
also, meinst du einem Pointer den Zeiger auf deine Variable zwueisen oder einen Typ deklarieren?
Typ deklarieren:
Delphi-Quelltext 1: 2: 3: 4: 5:
| type TPointerToLong: ^Long;
PMyType = ^TMyType; TMyType = |
Pointer-Variable zuweisen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var P: TPointerToLong; L: Long; begin L := P := @L; |
War es das was du wissen wolltest?
_________________ Life is a bad adventure, but the graphic is really good!
|
|
shadowdancer2k 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 01.11.04 16:27
Die Antwort hilft mir leider nur bedingt weiter. Aber ich habe mich ja auch nicht wirklich deutlich ausgedrückt. Also, ich wollte wissen, ob so etwas in Delphi möglich ist:
function test(var x: ^longint): boolean;
Als Besipiel, oder muss ich x ausserhalb der Funktion als Pointer auf long deklarieren? Mein Compiler spuckt hier nämlich einen Fehler aus!
Und da ich von der C-Welt komme, ist dass für mich nicht ganz verständlich!
|
|
Andreas Pfau
      
Beiträge: 997
|
Verfasst: Mo 01.11.04 20:10
Hallo,
erstmal:  YEAH!!!  wir konnten einen C-ler reformieren! (musst ich jetzt sagen... aber ich mag auch C/C++)
Wie du richtig vermutet hast musst du das extern deklarieren:
Delphi-Quelltext 1: 2: 3: 4:
| type PMyType = ^TMyType;
function Test(var X: PMyType): boolean; |
Ach ja, PLongint ist bereits deklariert, Unit "Types".
_________________ Life is a bad adventure, but the graphic is really good!
|
|
shadowdancer2k 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 02.11.04 10:32
Super! Danke, damit komm ich erst mal n ganzes Stück weiter!!
|
|
Matthias
      
Beiträge: 121
|
Verfasst: Di 02.11.04 11:01
Hallo,
ich versuch es mal mit ein paar Zeilen Source, ich hoffe es hilft.
Matthias
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| var BitmapInfo: TBitmapInfo; hd :Thandle;
Bitmap := TBitmap.Create;
with Bitmap do begin Width:= BitmapInfo.bmiHeader.biWidth; Height:=Bitmapinfo.bmiHeader.biHeight;
hd:= DrawDibOpen; DrawDibDraw(hd, canvas.handle, 0, 0, BitmapInfo.BmiHeader.biwidth, BitmapInfo.bmiheader.biheight, @BitmapInfo.bmiHeader, Frame, 0 ,0 , BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biheight, 0);
DrawDibClose(hd); end; |
|
|