Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi XE und Windows 7 BMP -> AVI (https://www.delphipraxis.net/158603-delphi-xe-und-windows-7-bmp-avi.html)

fishbrain 23. Feb 2011 16:44

Delphi XE und Windows 7 BMP -> AVI
 
Hallo,

In mein Fraktal Programm soll eine Video Funktion eingebaut werden.

Habe jetzt den TAviWriter_2 getestet, aber beim ausführen des SampleProjekts kommt der Fehler:
Failed to create AVI video file. Err. $80040154

Danach hab ich das BMPtoVideo aus der Delphi-Praxis getestet. Fehler:
Konnte AVI Datei nicht erstellen. Festplatte voll oder Datei in Benutzung?

Beim DSPack ist mir nicht ganz klar wie ich ein Video aus BMP dateien erstellen kann. Gibts da irgendwie ein tutorial?

Ich weiß das ist der x-te Thread zu dem Thema aber in anderen Threads finde ich keine Lösung. Meist sind diese schon mehrere Jahre alt weshalb ich darauf schließe, dass es entweder mit DelphiXE oder Win7 zu tun hat.

Würde mich freuen, wenn jemand eine einfache schnelle Lösung parat hätte ;)

fishbrain 27. Feb 2011 15:21

AW: Delphi XE und Windows 7 BMP -> AVI
 
Gibt es echt keine Lösung oder funktioniert das nur bei mir nicht?
Hab mich schon so gefreut auf meine Zoom Videos

fishbrain 1. Mär 2011 20:22

AW: Delphi XE und Windows 7 BMP -> AVI
 
Ok ich habe das Problem jetzt weiter einschränken können.
Die Methode AVIFileOpen aus der unit VFW. Bzw aus der dll AVIFIL32.DLL.

Allerdings weiß ich jetzt auch nicht genau was das Problem ist. Beziehn sich die Codes vllt auf ältere Versionen der AVIFIL32.DLL? Wenn ja wo krieg ich raus auf welche Version?

Pussyranger 6. Sep 2011 13:38

AW: Delphi XE und Windows 7 BMP -> AVI
 
Ich habe exakt das gleiche Problem. Ich habe auch Win7, Delphi XE und arbeite auch an einem Fraktalprogramm und möchte Zoomvideos direkt im Programm erstellen. Bmp2AVI habe ich mir auch schon angesehen. Leider klappt dies bei mir auch nicht. In Delphi 7 funktioniert dagegen alles wunderbar.
Hast du das Problem mittlerweise lösen können?
Oder hat jemand anders vielleicht eine Idee?

Das Programm Bmp2AVI findet sich übgrigens hier.

Über Hilfe wäre ich sehr dankbar.
LG,

Pussyranger

ChrisE 6. Sep 2011 14:00

AW: Delphi XE und Windows 7 BMP -> AVI
 
Hallo,

es hilft vielleicht nicht viel, aber ich kann das Projekt Bmp2Avi problemlos mit Delphi 2007 erzeugen und es tut was es soll
(das ganze unter Windows 7).

Ich würde also mal nach (schwach)stellen Suchen die mit String/Char zu tun haben. Da gab es ja die große Umstellung auf Unicode (jetzt 2Byte pro Char).

Gruß, Chris

[EDIT]Du hast aber schon schreibrechte für das Verzeichnis, in dem Du das Video erstellen willst?[/EDIT]

Pussyranger 6. Sep 2011 14:53

AW: Delphi XE und Windows 7 BMP -> AVI
 
Danke für die schnelle Antwort! Es ist gut möglich, dass es an der Umstellung auf Unicode liegt, denn an einer Stelle musste ich den Quellcode deshalb schon ändern, damit der Code überhaupt kompiliert wurde:
Delphi-Quellcode:
AVIFileOpen(pfile, PAnsiChar(WorkFile), OF_WRITE or OF_CREATE, nil)
Was mache ich denn mit den anderen Stellen, die mit String/Char zu tun haben?

ChrisE 6. Sep 2011 15:20

AW: Delphi XE und Windows 7 BMP -> AVI
 
Zitat:

Zitat von Pussyranger (Beitrag 1122142)
Delphi-Quellcode:
AVIFileOpen(pfile, PAnsiChar(WorkFile), OF_WRITE or OF_CREATE, nil)

Das erscheint mir nicht ganz logisch. Denn diese Funktion stellt sich generisch um zwischen WideString und AnsiString. Diese
Delphi-Quellcode:
{$IFDEF Unicode}
sollten eigentlich genau dafür sorgen, dass du das nicht machen musst :gruebel:

Vielleicht sollte sich da jemand einbringen, der ein Unicode-Delphi hat. Ich hab leider nur ein Delphi 2007 :-(

Sorry.

Gruß, Chris

[EDIT]OMG - nimm bitte nochmal das originalprojekt und suche nach
Delphi-Quellcode:
{$Undef Unicode}
und mach ein Punkt vor das $-Zeichen (Compiler-Direktive deaktivieren) Unicode muss aktiv bleiben, wenn es denn da ist. Jetzt bin ich mnir nur nicht sicher, ob Delphi XE dieses Define automatisch macht, oder ob du es von Hand machen musst.
Sollte es nach dieser Punkt-Geschichte immer noch nicht funktionieren, dann mach mal an diesen ganzen Stellen ein
Delphi-Quellcode:
{$DEFINE UNICODE}
[/EDIT]
[EDIT2]
Dieses Undef ist wohl nur in der Unit VFW.pas. Der Test sollte also einfach sein ;-)
[/EDIT2]

Pussyranger 6. Sep 2011 16:19

AW: Delphi XE und Windows 7 BMP -> AVI
 
Stimmt, wenn ich einen Punkt vor das Dollarzeichen bei
Code:
{$Undef Unicode}
setze, funktioniert auch
Delphi-Quellcode:
AVIFileOpen(pfile, PChar(WorkFile), OF_WRITE or OF_CREATE, nil)
Jedoch tritt nun bei der if-Abfrage
Code:
if AVIFileCreateStream(pfile, ps, asi) <> AVIERR_OK then raise Exception.Create('Konnte keinen AVI-Stream erzeugen.');
folgender Fehler beim Kompilieren auf, den ich nicht verstehe: "[DCC Fehler] CreateAVI.pas(227): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen".
Klammer ich die if-Abfrage aus, kann ich den Code fehlerfrei kompilieren, beim Erstellen einer AVI-Datei kommt jeder weiterhin die Fehlermeldung.
Mit {$DEFINE UNICODE} passiert das Gleiche.
Sollte ich vor jeder Kompileransweisung einen Punkt vor dem Dollarzeichen setzen?

ChrisE 7. Sep 2011 09:07

AW: Delphi XE und Windows 7 BMP -> AVI
 
Zitat:

Zitat von Pussyranger (Beitrag 1122180)
Sollte ich vor jeder Kompileransweisung einen Punkt vor dem Dollarzeichen setzen?

Nein :-)

Die Compileranweisung sorgt ja gerade dafür, dass es eben mit Unicode (also Delphi > 2007) funktionieren soll. Der Fehler wird wo anders liegen.
Leider kann ich Dir nicht sagen, wo genau. Hab wie gesagt kein Delphi mit Unicode :-(

Gruß, Chris
P.S.: Viel Erfolg weiterhin

EWeiss 7. Sep 2011 09:16

AW: Delphi XE und Windows 7 BMP -> AVI
 
Ich weiss nicht genau was du machen willst
aber warum verwendest du nicht die VFW.pas ?

Damit spiele ich mein Video in meinem Visualisierungs Plugin ab.
Wobei hier jedes Frame in eine Texture umgewandelt wird. (OpenGL)

Keine ahnung ob dir das hilft.

EDIT!
Die Unicode flags bringen hier leider nichts. ;)
Du solltest für nicht Unicode AVIFileOpen..
und für Unicode AVIFileOpenW
verwenden

Unicode! (OpenGL)

Delphi-Quellcode:
procedure OpenAVI(filename : PWideChar; var AnimTex: array of TMmTex; Index: Integer);
begin
  AVIFileInit;

  if AVIFileOpenW(AviFile, FileName, OF_READ or OF_SHARE_DENY_WRITE, nil) = 0 then
  begin
    AVIFileInfo(AVIFile, @AVIInfo, SizeOf(AviInfo));
    AVIStreamOpenFromFileW(AVIStream, FileName, streamtypeVIDEO, 0, OF_READ, nil);
    AVIStreamInfo(AVIStream, @StreamInfo, SizeOf(StreamInfo));
    AVILength :=AVIStreamLengthTime(AVIStream);
    GetMem(FrameData, AVIInfo.dwWidth*AVIInfo.dwHeight * 3);

    GetFramePointer :=AVIStreamGetFrameOpen(AVIStream, nil);

    AnimTex[Index].Texture := CreateTexture(AviInfo.dwWidth, AviInfo.dwHeight, GL_RGB, FrameData);
  end
  else
    MessageBox(0, 'Failed To Open The AVI Stream', 'Error', MB_OK OR MB_ICONEXCLAMATION);
end;
PS:
Delphi-Quellcode:
function   AVIFileCreateStreamW(pfile: PAVIFILE; var ppavi: PAVISTREAM; psi: PAVISTREAMINFOW): HResult; stdcall;
function   AVIFileCreateStreamA(pfile: PAVIFILE; var ppavi: PAVISTREAM; psi: PAVISTREAMINFOA): HResult; stdcall;
Zitat:

Denn diese Funktion stellt sich generisch um zwischen WideString und AnsiString.
Mit sicherheit nicht! Denn es gibt dafür direkte Unicode Funktionen
Siehe W! und A!


gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz