AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Umwandlung jpeg --> Bitmap hier: Zeitbedarf
Thema durchsuchen
Ansicht
Themen-Optionen

Umwandlung jpeg --> Bitmap hier: Zeitbedarf

Ein Thema von KPBecker · begonnen am 8. Okt 2007 · letzter Beitrag vom 11. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#1

Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 13:59
Hallo, Delphi-Praktiker,

Umwandlung eines eingelesenen jpeg-Bildes (jpgBild) in eine Bitmap (bmpBild):
(Zweck: Die Kamera liefert ein jpeg, zur einfachen Bearbeitung brauche ich das Bitmap.)

Delphi-Quellcode:
    jpgBild.LoadFromFile(BildName);
    bmpBild.Assign(jpgBild);
Dieses Verfahren (Assign) dauert ziemlich lange (0,7 MB jpeg-Datei ca. 200ms, 3 MB jpeg-Datei ca. 1,2 s bei 3 GHz CPU).
(Das Laden fällt demgegenüber gar nicht ins Gewicht.)


Bei dem Ziel, 4-8 Bilder / s zu verarbeiten, ist das ein ko-Kriterium.

Frage:
Benutzt Assign schon schnelle Algorithmen oder gibt es deutliche bessere Lösungen ?

Vielen Dank,
Klaus-Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 14:08
Das .LoadFromFile() wandelt das bild schon in BMP, da dies das interne Format von TImage ist.
Markus Kinzler
  Mit Zitat antworten Zitat
KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#3

Re: Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 14:51
Hallo, mkinzler,

nach dem Laden meiner jpeg-Datei ('BildName' ist ein jpeg-File)

  jpgBild.LoadFromFile(BildName); habe ich zunächst ein jpeg-Bild zur Verfügung, das ich in bmp umwandeln muß - dachte ich.

Ich weise dieses Bild keinem TImage zu (ich will es gar nicht sehen), sondern brauche eine Bitmap zur Weiterbearbeitung.

Wie komme ich (in meinem Beispiel) von jpgBild nach bmpBild, ohne Assign zu verwenden ?

Lösung ???:
Wenn ich jpgBild einem TImage zuweise, geht das (nach einem ersten Versuch) tatsächlich deutlich flotter als das Assign !!
Ist der Umweg jpgBild --> TImage (unsichtbar, von der Sache her unnötig) --> bmpBild die schellere Lösung ?

    imgBild.Picture.Assign(jpgBild); Frage 1 daher, wie komme ich (schnell) an das Bitmap, das dem TImage intern wohl zu Grunde liegt ?
Frage 2: Wenn das alles über diesen Umweg besser funktioniert, warum ist

bmpBild.Assign(jpgBild); so langsam und
imgBild.Picture.Assign(jpgBild); soviel schneller ??


Klaus-Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 14:54
das Assign ist unnötig, da das bild nach dem laden im Bmp-Format vorliegt. du kannst es deshalb direkt als Bmp Speichern.
Markus Kinzler
  Mit Zitat antworten Zitat
KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#5

Re: Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 15:02
Hallo, mkinzler,

entschuldige, ich hab's immer noch nicht:

Delphi-Quellcode:
var:
  jpgBild: TJPEGImage;
  bmpBild: TBitmap;
begin
  jpgBild:= TJPEGImage.Create;
  bmpBild:= TBitmap.Create;
  jpgBild.LoadFromFile(Bildname); // bmpBild.LoadFromFile(BildName) geht nicht !

  // und nun ??
  // wie bekomme ich das Bild nach bmpBild ?

  ...
end;
Klaus-Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 15:04
Du brauchst das 2. TImage nicht!
Delphi-Quellcode:
var
  jpgBild: TJPEGImage;
begin
  jpgBild:= TJPEGImage.Create;
  jpgBild.LoadFromFile(Bildname);
  jpgBild.SaveToFile( Bildname2);
Markus Kinzler
  Mit Zitat antworten Zitat
KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#7

Re: Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 15:16
Ich versteh's immer noch nicht:


Zitat von mkinzler:
Du brauchst das 2. TImage nicht! --> wo habe ich ein zweites TImage ???
Delphi-Quellcode:
var
  jpgBild: TJPEGImage;
begin
  jpgBild:= TJPEGImage.Create;
  jpgBild.LoadFromFile(Bildname); --> soweit, so gut
  jpgBild.SaveToFile( Bildname2); --> ich möchte nichts "To File Saven"

Ich möchte das eingelesene JPEG-Bild zur weiteren Bearbeitung als Bitmap in bmpBild stehen haben.

bmpBild:= xxxxx oder so ähnlich.


Klaus-Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 15:21
Ein TImage (oder abgeleitete klasse) speichert intern immer im Bitmap-Format!

Delphi-Quellcode:
Uses ...jpeg, ...
...
var
  bmpBild: TBitmap;
begin
  bmpBild:= TBitmap.Create;
  bmpBild.LoadFromFile('Bildname.jpg');
sollte eigentlich auch funktionieren.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 15:23
hast du es schon mit einem einfachen Draw versucht? Also erst die Größe des Bitmaps mit Bitmap.SetSize setzen und dann mit Bitmap.Canvas.Draw das jpeg auf die Canvas des bitmaps bringen.

@mkinzler: Warum schreibst du etwas von einem TImage? Das wird doch gar nicht gebraucht.
Und nein, ein TBitmap kann kein jpeg laden. Es heißt ja nicht umsonst TBitmap und nicht TJPEG, TTGA, TTIF etc.
ein TBitmap kann eigentlich nur ein Bitmap laden.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
KPBecker

Registriert seit: 1. Mär 2004
Ort: Mannheim
120 Beiträge
 
Delphi 2010 Architect
 
#10

Re: Umwandlung jpeg --> Bitmap hier: Zeitbedarf

  Alt 8. Okt 2007, 15:40
Zitat von mkinzler:
Ein TImage (oder abgeleitete klasse) speichert intern immer im Bitmap-Format!

Delphi-Quellcode:
Uses ...jpeg, ...
...
var
  bmpBild: TBitmap;
begin
  bmpBild:= TBitmap.Create;
  bmpBild.LoadFromFile('Bildname.jpg');
sollte eigentlich auch funktionieren.

Habe ich auch gedacht, aber ich bekomme den Fehler

Im Projekt ... ist eine Exception der Klasse EInvalidGraphic aufgetreten. Meldung: "Bitmap ist ungültig".

Also
Delphi-Quellcode:
;
  jpgBild.LoadFromFile('BildName.jpg');
  bmpBild.Assign(jpgBild);
--> geht

Die Änderung der ersten Zeile in
    bmpBild.LoadFromFile('BildName.jpg'); --> bringt die genannte Fehlermeldung. (bmpBild ist hier schon genau so definiert, wie im Beispiel oben.)


Aber:
Die Zuweisung eines JPEG an ein TImage geht sehr schnell und dabei findet, wie Du sagst, ja auch schon eine Umwandlung in ein Bitmap statt. Wie komme ich an dieses Bitmap, um es meiner Variablen bmpBild zuzuweisen.
Das würde helfen.

Klaus-Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.
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