![]() |
Farbwerte aus JPEG Bildern auslesen
Servus,
Ein Freund und ich wollen hiermit um Hilfe bei folgender Angelegenheit ersuchen: Wir wurden mit der Aufgabe betraut, JPEG-Bilder von einem Programm einlesen zu lassen und dann aus diesem automatisch die Farbwerte entnehmen zu lassen. Nun haben wir zwei Probleme:
Mit der Hoffnung auf rasche Hilfe, Andi und Philipp |
Re: Farbwerte aus JPEG Bildern auslesen
Dann wollen wir mal :)
Also das mit den Dateien auslesen
Delphi-Quellcode:
Das sollte fürs erste mit den Verzeichnis funktionieren, denke ich.
function GetJPG(Verzeichnis:string):TStringList;
var SR : TSearchRec; VerzList:TStringList; begin if Verzeichnis[length(Verzeichnis)]<>'\' then Verzeichnis:=Verzeichnis+'\'; if (FindFirst(Verzeichnis+'*.jpg',$3F,SR)=0) then begin repeat if (SR.Name<>'.') and (SR.Name<>'..') then VerzListe.Add(Verzeichnis+SR.Name); until FindNext(SR)<>0; FindClose(SR); end; result:=VerzListe; end; Das mit den Pixels sollte so Funktionieren: - Ihr lest die Datei in ein TImage ein. - Dann bildet ihr 2 For-Schleifen mit i,j, die muessen so groß sein wie das Bild breit/groß ist. - Dann muesst ihr nurnoch mit image1.canvas.pixels[i,j] das ding durchgehen - Ihr erhaltet dann halt genuegend TColor werte, die ihr nurnoch abspeichern muesst Denke das sollt helfen mfg Kiste |
Re: Farbwerte aus JPEG Bildern auslesen
Danke für die umgehende Hilfe. Das Einlesen der Bilder läuft wie am Schnürchen. Gibt es eine Funktion in Delphi, mit der man wie bei einer Standartinstallation die Dateien manuell ohne Angabe des Pfades auswählen kann? Du weisst schon, auf Button drücken und rumklicken, Windoof2k rulez. Wir legen ja Wert auf Benutzerfreundlichkeit. :stupid:
|
Re: Farbwerte aus JPEG Bildern auslesen
Du meinst TOpenDialog und TSaveDialog? Findeste im Karteireiter "Dialoge"
gut Nacht ;) Die Cebit ruft morgen mfg Kiste |
Re: Farbwerte aus JPEG Bildern auslesen
Code:
Haben diesen Code jetzt geschrieben und alles klappt einwandfrei bis zu "farben[k]:=image1.canvas.pixels[i,j]"
procedure TForm1.Button2Click(Sender: TObject);
var //Hier wird das Bild in Image1 eingelesen Jpeg: TJpegImage; FBitmap:TBitmap; begin Jpeg := TJpegImage.Create; try Jpeg.LoadFromFile(edit1.text); FBitmap := TBitmap.Create; FBitmap.Assign(Jpeg); Image1.Picture.Bitmap := FBitmap; finally Jpeg.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var farben:array of integer; i,j,k:integer; begin //Hier werden die Farbwerte ausgelesen for i:= 1to 760 do begin for j:= 1to 578 do begin k:=k+1; farben[k]:=image1.canvas.pixels[i,j] end; end; end; da kommt dann die Fehlermeldung "can only modify Image if it contains a bitmap" aber wir wollen die ja nicht modifizieren, sondern lediglich die Farbwerte auslesen. Zumal: Oberhalb wurde ja bitmap bereits in Bezug gebracht zu Image1 und alles lief. Auch führt das Umwandeln des Bildes zu einer Bitmap lediglich zu einer anderen Fehlermeldung. EDIT: Also, wir haben jetzt noch diesen Codeteil hier hinzugefügt:
Code:
und erhalten nun immer diesen Fehler:
procedure TForm1.FormCreate(Sender: TObject);
VAR Bitmap : TBitmap; begin Bitmap := TBitmap.Create; Bitmap.Width := 760; Bitmap.Height := 578; Image1.Picture.Graphic := Bitmap; end; 'Access violation at address 0046548C in module 'Project1.exe'. Write of address 010AB424.' @Kiste: Haben das mit dem TOpenDialog gefunden und wollten es gleich mal zum Test bringen, aber wenn ich des in mein Formblatt einfüge und das Programm starte erscheint das Teil nicht auf dem ausgeführten Programm... |
Re: Farbwerte aus JPEG Bildern auslesen
Code:
Die Dimensionen des Arrays müssen erst mit
procedure TForm1.Button1Click(Sender: TObject);
var farben:array of integer; i,j,k:integer; begin //Hier werden die Farbwerte ausgelesen for i:= 1to 760 do begin for j:= 1to 578 do begin k:=k+1; farben[k]:=image1.canvas.pixels[i,j] end; end; end; ![]()
Delphi-Quellcode:
heißen.
for i := 0 to 759 do begin
for j := 0 to 577 do begin Warum arbeitet ihr nicht gleich mit dem eingelesenen Bitmap? Das wäre die beste Lösung. Zitat:
![]() |
Re: Farbwerte aus JPEG Bildern auslesen
Mir ist aufgefallen, dass du bei solchen Prozeduren
Delphi-Quellcode:
das FBitmap am Ende nicht mehr mit FBitmap.Free freigibst. Das ist doch sicher nicht so gewollt, oder?
procedure TForm1.Button2Click(Sender: TObject);
var Jpeg: TJpegImage; FBitmap:TBitmap; begin Jpeg := TJpegImage.Create; try Jpeg.LoadFromFile(edit1.text); FBitmap := TBitmap.Create; FBitmap.Assign(Jpeg); Image1.Picture.Bitmap := FBitmap; finally Jpeg.Free; end; end; MfG Binärbaum |
Re: Farbwerte aus JPEG Bildern auslesen
Hallo,
für mich liest sich das so, als ob Ihr das Bild nach "Image1.Picture.Bitmap := FBitmap;" noch gar nicht zur Verfügung habt. Daher die Fehlermeldung "can only modify Image if it contains a bitmap" Das Programm sieht nur, dass kein Bild da ist - was damit passieren soll, das weiß es nun doch noch nicht ... Habt Ihr mal geprüft, ob das Bild wirklich übernommen wurde? Gruß Harald |
Re: Farbwerte aus JPEG Bildern auslesen
Zitat:
Wenn wir die For-Schleife mit i:= 0 to 759 deklarieren würde es doch den letzten pixel auslassen und es gibt doch keinen Pixel 0 oder? Deswegen 1 to 760 damit jeder Pixel ausgelesen werden kann... oder? :wall: Aber auf jeden mal vielen Dank für die schnelle Hilfe |
Re: Farbwerte aus JPEG Bildern auslesen
Delphi beginnt oft mit einer 0 und nur manchmal mit einer 1 ;)
air |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz