Zitat von
CloudyofSky:
Hey Freunde der Kunst,
Ich weis ich kling nun ein wenig so, als ob ich nun gar nicht programmieren kann, aber ich habe mich mit Grafik, per Programmierung, bie dato noch gar nicht beschäftigt und wollte nun mal doch anfangen.
Hi und herzlich Willkommen in der
DP
Ob es sich so anhört, ob du programmieren kannst oder nicht, ist doch egal! Klingt eigentlich so, als ob du ein bestimmtes Problem hast (JPEGs anzeigen und in einen Container speichern bzw. wieder laden), nicht nach mehr oder weniger. Und da bist du schon richtig in der
DP, da wird dir schon geholfen werden.
Da trete ich auch gerne den Beweis für an:
Zitat von
CloudyofSky:
Die Bilder für die Animation liegen als einzelne Bilder vor. Die würde ich gerne in einer Datei zusammenfügen(gleich wie eine Video Datei). Sind eine Ansammlung von vorgerenderten JPegs
Dazu muss ich gleich sagen, dass JPEGs nicht unbedingt optimal sind. Was du machst um sie anzuzeigen ist, dass du sie entpackst und dann wieder ein Bitmap hast, mit dem du arbeitest. Das ganze geht zwar relativ flink, aber dass wäre hier wirklich vor der Anzeige jeden JPEGS nötig (ggf. wieder und wieder). Einfacher wäre es da, wenn du ein Archiv (gepackt) von den gebrauchten Bildern hast, es entpackst (die entpackten Bitmaps können dann im Speicher gehalten werden) und dann die Bitmaps verwendest. Wird die Animation nicht mehr gebraucht kannst du dann einfach die Bitmaps (und ihren Speicher) frei geben.
Zitat von
CloudyofSky:
Mit TBitmap kann ich nun schon arbeiten, laden und so...auch schon Dateien dort zwischen lagern und später mit bitblt auf ein Image kopieren. Nur klappt das mit den JPegs nicht
Für JPEGs gibt es die TJPEGImage Komponente. Die ist ziemlich ähnlich zu der TBitmap aufgebaut. Mittels assign kannst du so einer Bitmap auch ein TJPEGImage zuweisen, also den Inhalt zwischen den beiden konvertieren. Dabei solltest du dann einfach mal in die
OH schauen, Stichwort wäre hier dann noch BMPneeded (glaube es hieß so).
Ja, damit hast du schon alles um ein JPEG in eine Bitmap zu packen und mit der kannst du dann wie gewohnt arbeiten. Alternativ kannst du auch der Picture Eigenschaft des TImage direkt ein TJpegImage zuweisen.
Ja, was das speicher in einer Datei angeht, so hast du auch hier mehr als eine Möglichkeit. Die einfachste besteht darin, dass du einfach auf eine Komponente zurückgreifst, die die gesuchte Logik implementiert. In deinem Fall wäre das ja eigentlich nur das speichern von mehr als einer Datei in einem Container. Da würde sich dann z.B. eine Zip-Kapselung (z.B. Abbrevia) anbieten. Der Vorteil ist klar, du bekommst eine fertige Lösung. Ganz allgemein kannst du ein JPEG laden, indem du die Methode TJPEGImage.LoadFromFile ode TJPEGImage.LoadFromStream verwendest. Solltest du Daten aus einer Archiv entpacken, so kannst du hier mit einem TMemoryStream arbeiten, die Daten in diesen rein entpacken und dann an die LoadFromStream Methode übergeben. Dabei solltest du die Position des TMemorystream (gleichnamige Eigenschaft) vor dem Laden wieder auf 0 setzen (ist ein Zeiger auf die stelle ab der gelesen werden soll).
Alternativ kannst du natürlich auch ein properitäres Format erstellen. Da benötigst du dann ein paar Meta-Informationen. Eigentlich musst du dir nur überlegen, wie du den Anfang und das Ende eines JPEGs in dieser Datei markierst. Das kannst du mit speziellen Auszeichnungen oder einem Inhaltsverzeichnis oder beidem machen (in einer Zip Datei wird Ähnliches gemacht, allerdings halt auch eine Menge mehr, z.B. eine CRC32 Checksumme berechnet).
Frag einfach, wenn du irgendwo nicht weiter kommst!
Gruß Der Unwissende