Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - PNG-Grösse in Console Application einlesen


walter_b - Di 12.05.09 09:39
Titel: PNG-Grösse in Console Application einlesen
Hello world!

Ich stehe vor folgendem Problem: Ich habe eine Console Application und möchte dort die Höhe und die Breite eines PNG-Bildes einlesen, allerdings habe ich keine Ahnung, wie ich das hinkriege.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
     
var
  F : text;
  s : string;

[...]

  write('Input file name to read : '); readln(s);
  assign(F,s);
  reset(F);
  while not EOF(F) do
  begin
    readln(F,s);
    writeln(s);
  end;
  close(F);



So habe ich es bisher versucht, jedoch kann das Programm das Bild natürlich nicht als Textdatei lesen, bzw. es wird nur "ëPNG" ausgegeben. Wie muss ich das anstellen?

Vielen Dank!


Reinhard Kern - Di 12.05.09 09:45

user profile iconwalter_b hat folgendes geschrieben Zum zitierten Posting springen:
Hello world!

Ich stehe vor folgendem Problem: Ich habe eine Console Application und möchte dort die Höhe und die Breite eines PNG-Bildes einlesen...


Hallo,

die nötigen Infos über das PNG-Format findest du u.a. hier:

http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html#C.IHDR

Gruss Reinhard


walter_b - Di 12.05.09 10:01

Vielen Dank für den Link. Ich habe mir mal einen Überblick verschafft, jedoch alles was ich gefunden habe, ist, dass im IHDR-Teil des PNG die Informationen sind, die ich brauche. Doch wie bringe ich diese Infos raus? Habe leider keine Idee, wie ich das angehen könnte.


BenBE - Di 12.05.09 10:49

Wer sagt, dass Du die PNG-Komponenten\Klassen nicht auch in einer Konsolen-Anwendung nutzen kannst?


walter_b - Di 12.05.09 13:15

hm... ich steh wohl gerade voll auf der Leitung... Wie soll ich denn die PNG-Komponenten benützen, bzw. ansprechen?

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ok, hat sich erledigt, habe es auf eine andere Art lösen können.


Marc. - Di 12.05.09 15:21

user profile iconwalter_b hat folgendes geschrieben Zum zitierten Posting springen:
Ok, hat sich erledigt, habe es auf eine andere Art lösen können.

Und wie? :)


walter_b - Do 14.05.09 10:36

Mit folgender Funktion:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
FUNCTION DimPNG(dateiname: STRING; pos: LONGINT): INTEGER;
VAR f        : FILE OF BYTE;
    d        : INTEGER;
    bytewert : BYTE;
BEGIN
  ASSIGN(f,dateiname);
  RESET(f);
  SEEK(f,pos);
  read(f,bytewert);
  d := bytewert*256;
  read(f,bytewert);
  CLOSE(f);
  DimPNG := d + bytewert;
END;


Und aufgerufen mit diesen zwei Zeilen:


Delphi-Quelltext
1:
2:
Writeln(DimPNG(pngfile,18));
writeln(DimPNG(pngfile,22));


gibt es wunderschön die Höhe, Respektive die Breite.