AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Farbwerte aus JPEG Bildern auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Farbwerte aus JPEG Bildern auslesen

Ein Thema von ChinEnte · begonnen am 12. Mär 2005 · letzter Beitrag vom 9. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
ChinEnte

Registriert seit: 12. Mär 2005
Ort: Heidelberg
8 Beiträge
 
Delphi 7 Enterprise
 
#1

Farbwerte aus JPEG Bildern auslesen

  Alt 12. Mär 2005, 19:45
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:
  • Wie automatisieren wir das Einlesen von Bildern so, dass nur noch der Pfad angegeben werden muss?
  • Wie lesen wir aus JPEG-Bildern Pixel für Pixel die Farbwerte in Hexadezimal-Werten aus?

Mit der Hoffnung auf rasche Hilfe,
Andi und Philipp
  Mit Zitat antworten Zitat
Benutzerbild von Kiste
Kiste

Registriert seit: 10. Mär 2005
Ort: Papenburg
14 Beiträge
 
Delphi 7 Personal
 
#2

Re: Farbwerte aus JPEG Bildern auslesen

  Alt 12. Mär 2005, 20:19
Dann wollen wir mal

Also das mit den Dateien auslesen

Delphi-Quellcode:
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 sollte fürs erste mit den Verzeichnis funktionieren, denke ich.

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
(+PeRLe) guckt euch das an......kist3 owned wieder back 2 the roots quasi
  Mit Zitat antworten Zitat
ChinEnte

Registriert seit: 12. Mär 2005
Ort: Heidelberg
8 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Farbwerte aus JPEG Bildern auslesen

  Alt 12. Mär 2005, 22:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von Kiste
Kiste

Registriert seit: 10. Mär 2005
Ort: Papenburg
14 Beiträge
 
Delphi 7 Personal
 
#4

Re: Farbwerte aus JPEG Bildern auslesen

  Alt 12. Mär 2005, 22:18
Du meinst TOpenDialog und TSaveDialog? Findeste im Karteireiter "Dialoge"

gut Nacht Die Cebit ruft morgen

mfg Kiste
(+PeRLe) guckt euch das an......kist3 owned wieder back 2 the roots quasi
  Mit Zitat antworten Zitat
ChinEnte

Registriert seit: 12. Mär 2005
Ort: Heidelberg
8 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Farbwerte aus JPEG Bildern auslesen

  Alt 12. Mär 2005, 22:54
Code:
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;
Haben diesen Code jetzt geschrieben und alles klappt einwandfrei bis zu "farben[k]:=image1.canvas.pixels[i,j]"
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:
procedure TForm1.FormCreate(Sender: TObject);

  VAR Bitmap : TBitmap;
begin
  Bitmap := TBitmap.Create;
  Bitmap.Width := 760;
  Bitmap.Height := 578;
  Image1.Picture.Graphic := Bitmap;
end;
und erhalten nun immer diesen Fehler:

'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...
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Farbwerte aus JPEG Bildern auslesen

  Alt 12. Mär 2005, 23:55
Code:
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;
Die Dimensionen des Arrays müssen erst mit Delphi-Referenz durchsuchenSetLength festgelegt werden. Außerdem sollte es wohl
Delphi-Quellcode:
for i := 0 to 759 do begin
  for j := 0 to 577 do begin
heißen.
Warum arbeitet ihr nicht gleich mit dem eingelesenen Bitmap? Das wäre die beste Lösung.
Zitat:
@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...
Zum Ausführen musst du Delphi-Referenz durchsuchenExecute benutzen. Siehe auch die OH zu TOpenDialog.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Farbwerte aus JPEG Bildern auslesen

  Alt 13. Mär 2005, 01:59
Mir ist aufgefallen, dass du bei solchen Prozeduren
Delphi-Quellcode:
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;
das FBitmap am Ende nicht mehr mit FBitmap.Free freigibst. Das ist doch sicher nicht so gewollt, oder?

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Harald

Registriert seit: 23. Dez 2003
Ort: Steinigtwolmsdorf
39 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Farbwerte aus JPEG Bildern auslesen

  Alt 13. Mär 2005, 07:35
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
Wissen ist das einzige Gut, welches sich vermehrt, wenn es geteilt wird ...
  Mit Zitat antworten Zitat
ChinEnte

Registriert seit: 12. Mär 2005
Ort: Heidelberg
8 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Farbwerte aus JPEG Bildern auslesen

  Alt 13. Mär 2005, 11:46
Zitat von Khabarakh:
Die Dimensionen des Arrays müssen erst mit Delphi-Referenz durchsuchenSetLength festgelegt werden. Außerdem sollte es wohl
Delphi-Quellcode:
for i := 0 to 759 do begin
  for j := 0 to 577 do begin
heißen.
Warum arbeitet ihr nicht gleich mit dem eingelesenen Bitmap? Das wäre die beste Lösung.
Wir haben im der Hilfe von Delphi nach setlength gesucht aber nur sachen für dynamische Arrays gefunden. Wir wollen aber nur eine simple Array mit 439280 Positionen

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?
Aber auf jeden mal vielen Dank für die schnelle Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#10

Re: Farbwerte aus JPEG Bildern auslesen

  Alt 13. Mär 2005, 11:49
Delphi beginnt oft mit einer 0 und nur manchmal mit einer 1

air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  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 11:11 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