Tiff File auswerten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Tiff File auswerten

Beitrag von Marc »

Hallo Zusammen

Ich lade ein grosses Tiff File nach einem Timage (640 x 480). Das klappt bestens. Ich kann das ganze Bild sehen (stretch).
Das gibt mal eine Uebersicht.
Aber eigentlich möchte das original Bild auswerten. Das heisst die Grauwerte der einzelnen Pixel lesen und in eine Byte Array schreiben.
Muss ich das in ein TLazIntfImage kopieren? Oder ev. TBitmap.RAWImage? Gibt so viele Möglichkeiten.
Gibts vieleicht irgendwo ein brauchbares Beispiel?
Good code comes from experience, experience comes from bad code.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Tiff File auswerten

Beitrag von theo »

Also wenn du das nur einlesen und zugreifen willst, sollte es z.B. auch so gehen:

Code: Alles auswählen

uses ... FPReadTiff, FPimage;    
...
procedure TForm1.Button1Click(Sender: TObject);
var
  Image: TFPCustomImage;
  Reader: TFPCustomImageReader;
begin
  Image := TFPMemoryImage.Create(0, 0);
  Reader := TFPReaderTiff.Create;
  Image.LoadFromFile('/home/theo/Bilder/test.tiff', Reader);
  Caption := IntToStr(Image.Width) + ' ' + IntToStr(Image.Height); //Dimensionen anzeigen.
  ShowMessage(IntToHex(Image.Colors[10, 20].blue, 4)); //Blauwert an Punkt 10:20 als Word, nicht Byte.
  Reader.Free;
  Image.Free;
end;   
 
 

http://wiki.freepascal.org/fcl-image

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tiff File auswerten

Beitrag von Marc »

Vielen Dank für die Antwort.
Ja ich meine ich muss es nur lesen können.
Wenn das klappt bin ich einen riesen Schritt weiter. :-)
Good code comes from experience, experience comes from bad code.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tiff File auswerten

Beitrag von Marc »

Hallo Theo

Das Beispiel funktioniert. Vielen Dank nochmal.

Finde nur keine Dokumentation zu 'Image.Colors'.
Was macht denn die 4 bei 'Image.Colors[10, 20].blue, 4'?
Vier Stellen?

Wenn Image.Colors einen Integer Wert gibt, müsste
ImgValueInt1 := Image.Colors[10, 20].blue, 4;
gehen? Sieht falsch aus und geht auch nicht.

In der Doku (freepascal.org) steht zwar was von 0-65535.
Ich kriege Resultate wie FFFF oder 0202 also zweimal dasselbe Byte.
Aber egal.
Das mache ich denn mit
ImgValueInt1 := ImgValueInt1 shr 8; (ungetestet))
in Ordnung.
Oder zur Not den String zwei Stellen kürzen und nach Byte umwandeln.

Eigentlich will ich nur ein Graustufenbild einlesen. Scheinbar wird hier aber nach 16 bit 4 Kanal (RGBA?) gewandelt (eingelesen).
Kann ich das beim Einlesen nicht schon parametrieren? Ich meine so müsste ich ca den 8 Fachen Speicher brauchen, oder nicht?
Good code comes from experience, experience comes from bad code.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Tiff File auswerten

Beitrag von theo »

Ist nun mal so.
Wenn du mit TColor besser zurecht kommst, gibt es

Code: Alles auswählen

function FPColorToTColor(const FPColor: TFPColor): TColor;


S.a: http://wiki.freepascal.org/Colors/de

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tiff File auswerten

Beitrag von Marc »

Hallo Theo

Danke für die Geduld.
Jetzt klappt es. Die ,4 hat mich aus der Bahn geworfen. Die gehört ja nicht zu Image.Colors sondern zu IntToHex.
Kriege jetzt die Werte die ich brauche.
So kann ich weitermachen. Die grossen Bilder lass ich erstmal weg.
Good code comes from experience, experience comes from bad code.

Antworten