Entwickler-Ecke

Multimedia / Grafik - Suche Komponente um Bild zu zeichnen und als JPG zu speicher


Kay E. - Fr 26.11.10 21:15
Titel: Suche Komponente um Bild zu zeichnen und als JPG zu speicher
Hallo!

Darf ich mal anmerken, dass die Anzahl an Buchstaben für den Titel eindeutig zu klein ist? Naja, sei's drum...

Wie der Titel sagt, bin ich auf der Suche nach einer Komponente, auf der ich etwas abbilden kann, was ich berechnet hab und das ich dann als JPG-File abspeichern kann. Das Formular und dessen Canvas-Fläche fällt weg, da ich das Form noch anderweitig brauch. Paintbox hat keine Save-Methode (die ich kennen würde), TPicture ist nur eine virtuelle Klasse und keine Komponente (wahrscheinlich handhab ich die aber auch falsch) und TImage ist gut zum laden und speichern von Bildern - aber halt nur von existenten Bildern...
Vermutlich ist es eine sehr billige Frage, aber ich hab nichts brauchbares gefunden zu der Frage, welche Komponente ich benutzen sollte und v.a. auch, wie ich das Bild dann als JPG speicher. Als Bitmap, Metadaten und Icons findet mans alle Nase lang (auch die dafür am besten zu nehmenden Komponenten), aber nichts zum mittlerweile doch standartmäßigen JPG.

Wär super, wenn mir da jemand ein wenig unter die Arme greifen könnte. Super wär natürlich auch, wenn irgendwie noch ein Codeschnippsel dabei wär, der den Speichervorgang beschreibt.

Danke schonmal!


Dude566 - Fr 26.11.10 21:19

Wie wäre es alles in einer PaintBox zu zeichnen und dessen Inhalt dann in ein Jpeg laden und damit abspeichern.


Kay E. - Fr 26.11.10 21:23

Ja, sowas in der Art hab ich mir auch schon gedacht. Ich habs aber nicht hinbekommen. Meine Idee war, es von der Paintbox aus in einen Stream zu speichern und den Stream in eine JPEG zu laden (von TJpegImage) und dann zu speichern. Das ist aber daran gescheitert, dass Paintbox keine Save-Methoden hat... Demnach habsch dat dann nich hinbekommen... :\
Ein Codeschnippsel wär wirklich hilfreich. Muss kein kompletter Code sein, aber zumindest ein paar Stichpunkte wären wirklich hilfreich!


Dude566 - Fr 26.11.10 22:40

http://www.delphipraxis.net/1108-paintbox-probleme.html

Das müsste auch mit Jpeg statt Bitmap funktionieren.


bummi - Fr 26.11.10 22:42


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
Procedure SaveBMPasJPG(Const FN:String;BMP:TBitmap;Qual:Integer);
var
  jp:TJpegImage;
begin
      jp:=TJpegImage.Create;
      jp.CompressionQuality :=  qual;
      try
      with jp do
        begin
          Assign(BMP);
          SaveToFile(fn)
        end;
      finally
      jp.Free;
      end;
end;

//...

Image1.Canvas.Ellipse(0,0,100,100);
SaveBMPasJPG('C:\Bilder\My.jpg',image1.Picture.Bitmap,90)


platzwart - Fr 26.11.10 23:12

Bin mir nicht ganz sicher, aber reicht es nicht aus jpeg in die uses mit aufzunehmen? Da war doch irgendwas...


bummi - Fr 26.11.10 23:28

Bei diesem Versuch wird das Bild mit dem Dateinamen z.B. Test.jpg gespeichert, ein Doppelklick darauf öffnet es mit dem Fehlertoleranten Windows Bildbetrachter.
Das ganze wird als Bitmap abgespeichert, mit dem falschen Namen dran.

Ein ähnliches Gerücht geistert auch immer wieder durch die Foren beim Thema JPG aus Blobfeldern zu laden, geht nur per Stream, aber das Gerücht hält sich hartnäckig.


Kay E. - Sa 27.11.10 10:33

Super, danke bummi!
Ich bin immer davon ausgegangen, dass Canvas und Picture zwei gänzlich unabhängige Eigenschaften sind, deswegen bin ich nicht davon ausgegangen, dass man mit Picture auch das Canvas ansprechen kann. So funktioniert das alles! Vielen Dank!


bummi - Sa 27.11.10 11:21

Über das Canvas greifst Du auf das Canvas von Image.Picture.Bitmap zu, Du kannst Dir auch einfach ein Bitmap erzeugen, die Properties u.a. Pixelformat setzen und dessen Canvas nutzen.


Dude566 - Sa 27.11.10 16:01

Warum der Aufwand, man kann es doch auch einfacher haben:

Delphi-Quelltext
1:
Image1.Picture.SaveToFile(ExtractFilePath(ParamStr(0)) + 'test.jpeg');                    


Oder ist das so eine schlechte Lösung?!


Kay E. - Sa 27.11.10 18:16

user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
Bei diesem Versuch wird das Bild mit dem Dateinamen z.B. Test.jpg gespeichert, ein Doppelklick darauf öffnet es mit dem Fehlertoleranten Windows Bildbetrachter.
Das ganze wird als Bitmap abgespeichert, mit dem falschen Namen dran.

Ein ähnliches Gerücht geistert auch immer wieder durch die Foren beim Thema JPG aus Blobfeldern zu laden, geht nur per Stream, aber das Gerücht hält sich hartnäckig.


@ Dude: Ich hab deine Version und bummis mal gegenübergestellt. Wie bummi bereits andeutet, wird das Bild auf deine Art nicht wirklich als JPG gespeichert, sondern nur so benannt. Mit Bummi's Methode ist das Bild 57 kB groß, mit deiner 3165 kB.

@ bummi: Werd ich im Hinterkopf behalten!


Dude566 - Sa 27.11.10 18:45

Nein es wird eine Datei erstellt und diese ist dann auch vom Typ Jpeg, ich denke sie wird nur nicht komprimiert, was eine Jpeg Datei ausmacht. ;)


bummi - Sa 27.11.10 18:53

@Dude566
hast Du Dir mal die Header angeschaut ?

Stichwort BM / JFIF