Autor Beitrag
blacknight1974
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 26.12.08 01:27 
Hallo ich habe jetzt schon mehr als sech Stunden im WWW gesucht.
Es schein ein RIESEN Geheimnis zusein wie man Tif / Tiff in Delphi einlesen -> bearbeiten z.B. mit Canvas eine Linie ziehen und das ganze wieder als Tif / Tiff speichert.

Kann mir keiner sagen wie ich dieses mache?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 26.12.08 01:56 
Naja, eigentlich reicht es schon bei Google nach Suche bei Google TIF DELPHI zu suchen, ich weiß ja nicht wonach du gesucht hast, das war jedenfalls mein erster Suchversuch. :nixweiss:
Das erste Ergebnis ist die Lösung:
www.awaresystems.be/...ing/tiff/delphi.html

Zum reinen Einlesen verschiedener Formate benutze ich meistens GraphicEx.
blacknight1974 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 26.12.08 12:06 
Jo da war ich ja auch schon.... bringt nur nicht so viel. die downloads sind offline und ein beispiel gibt es auch nicht.
ich habe jetzt libtifdelphi von einer anderen seite. aber wie es da weiter geht :gruebel:

ich muß aber auch wieder ein tif speichern.

zeil ist es ein tif zu laden und mit z.b. canvas zu bearbeiten und dieses ergebnis dann wieder in ein tif zu speichern.


Zitat:
Das erste Ergebnis ist die Lösung:

sorry das blicke ich nicht. die downloads sind nicht mehr erreichbar und mein englich ist bei fast null.
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Fr 26.12.08 12:24 
Zum einlesen sagt die Suche hier im Forum schon mal das

www.delphi-forum.de/...82&highlight=tif , wobei dort auf die GraphicEx - Komponente verwiesen wird.


Zum bearbeiten:

www.torry.net/pages.php?id=103 Hier solltest du fündig werden :)


Grüße

Webo

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 26.12.08 12:33 
Stimmt, die Downloads hatte ich nicht getestet.
Aber bei Torry war es wie zu erwarten war noch vorhanden (Link falls jemand das später liest):
www.torry.net/pages.php?id=103
// EDIT: Gar nicht die derweil hinzugekommene Antwort gesehen :oops:

Direkt auf der Seite mit den fehlerhaften Downloads finden sich aber Links zu Beispielen wie diesem:
www.asmail.be/msg0055567530.html
blacknight1974 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 26.12.08 12:58 
Erst mal danke für Deine Mühe.

Das Problem ist ich kann das Engl. nicht lesen. Das ist als ob du einen Japanischen Text lesen mußt.
Ich brauch nur ein Beispiel. TIF Laden und anzeigen / TIF Speichern. Die Bespl. helfen mir nicht weiter.
Sie funktionieren einfach nicht.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  m: TBitmap;
begin
  try
    m:=ReadTiffIntoBitmap(Filename);  // <<<<--- Da sagt er mit immer Unbekanter Bezeichner ReadTiffIntoBitmap
    Image.Picture.Assign(m);
    m.Destroy;
  except
    Image.Picture.Assign(nil);
  end;


Klasse !!!

LibTiffDelphi ist unter Uses deklariert.

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 26.12.08 13:02 
Diese Funktion steht in der ersten Antwort des Links ;-):
www.asmail.be/msg0055571626.html
(ganz unten, einfach kopieren)

user profile iconblacknight1974 hat folgendes geschrieben Zum zitierten Posting springen:
Das Problem ist ich kann das Engl. nicht lesen. Das ist als ob du einen Japanischen Text lesen mußt.
Schlecht für einen Programmierer. :D

// EDIT:
Btw. liefert da die Webseitenübersetzung von Google ganz gute Dienste:
translate.google.com...&sl=en&tl=de
Das ist sicher nicht besonders gutes Deutsch, aber es sollte reichen um den Text einigermaßen zu verstehen. Den Quelltext musst du natürlich aus dem Original kopieren. ;-)

Du kannst dort sogar Links folgen, die werden automatisch übersetzt. ;-)
blacknight1974 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 26.12.08 13:47 
Danke erstmal....

Aber ich gebe es auf. Das Programm funktioniert bis auf die Tif Geschichte. Dann lass ich erst eine Batchdatei laufen die IrfanView dazu veranlasst alle Datein im Verzeichnis als Tif zu kopieren. Ist zwar nicht die feine aber egal. es funktioniert. Ich kann kein Engl. habe es schon öfters versucht Volkshochschule usw. aber das ist nicht meine Welt.
Das mit den Tif funktioniert einfach nicht egal was ich mache.

Aber danke dir.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 26.12.08 14:18 
Ich kann ehrlich gesagt nicht nachvollziehen wo das Problem liegt, ich habe den Text nicht gelesen, der auf der Seite mit der Antwort steht, obwohl ich englisch durchaus kann.
Aber es war schlicht nicht notwendig, ich habe einfach nur den Quelltext kopiert. :nixweiss:

Ich habe auch beim Suchen manchmal Quelltext von chinesische oder russischen Seiten kopiert, obwohl ich die Sprachen nicht kann. Es ging ja nur um die Quelltextbeispiele und die Googleübersetzungen liefern auch ggf. Infos.

Jedenfalls ist das hier 1:1 der kopierte Quelltext (und der funktioniert bei mir), inkl. der uses Ergänzungen, wo die mitgelieferten Units natürlich hingehören, außerdem musst du die natürlich dem Projekt hinzufügen oder in den Suchpfad aufnehmen:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
uses LibTiffDelphi, LibDelphi, LibJpegDelphi, ZLibDelphi;

{$R *.dfm}

procedure TfrmMain.btnLoadTifClick(Sender: TObject);

  procedure TIFFReadRGBAImageSwapRB(Width,Height: Cardinal; Memory: Pointer);
  {$IFDEF DELPHI_5}
  type
    PCardinal = ^Cardinal;
  {$ENDIF}
  var
    m: PCardinal;
    n: Cardinal;
    o: Cardinal;
  begin
    m:=Memory;
    for n:=0 to Width*Height-1 do
    begin
      o:=m^;
      m^:= (o and $FF00FF00) or                {G and A}
          ((o and $00FF0000) shr 16) or        {B}
          ((o and $000000FF) shl 16);          {R}
      Inc(m);
    end;
  end;

  function ReadTiffIntoBitmap(Filename: String): TBitmap;
  var
    OpenTiff: PTIFF;
    FirstPageWidth,FirstPageHeight: Cardinal;
    FirstPageBitmap: TBitmap;
  begin
    OpenTiff:=TIFFOpen(Filename,'r');
    if OpenTiff=nil then raise Exception.Create(
             'Unable to open file '''+Filename+'''');
    TIFFGetField(OpenTiff,TIFFTAG_IMAGEWIDTH,@FirstPageWidth);
    TIFFGetField(OpenTiff,TIFFTAG_IMAGELENGTH,@FirstPageHeight);
    FirstPageBitmap:=nil;
    try
      FirstPageBitmap:=TBitmap.Create;
      FirstPageBitmap.PixelFormat:=pf32bit;
      FirstPageBitmap.Width:=FirstPageWidth;
      FirstPageBitmap.Height:=FirstPageHeight;
    except
      if FirstPageBitmap<>nil then FirstPageBitmap.Destroy;
      TIFFClose(OpenTiff);
      raise Exception.Create('Unable to create TBitmap buffer');
    end;
    TIFFReadRGBAImage(OpenTiff,FirstPageWidth,FirstPageHeight,
                 FirstPageBitmap.Scanline[FirstPageHeight-1],0);
    TIFFClose(OpenTiff);
    TIFFReadRGBAImageSwapRB(FirstPageWidth,FirstPageheight,
                 FirstPageBitmap.Scanline[FirstPageHeight-1]);
    Result:=FirstPageBitmap;
  end;

var
  m: TBitmap;
begin
  try
    m := ReadTiffIntoBitmap('T:\Dokumente und Einstellungen\Sebastian\Desktop\Unbenannt.tif');
    imgTest.Picture.Assign(m);
    m.Destroy;
  except
    imgTest.Picture.Assign(nil);
  end;
end;
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Fr 26.12.08 15:22 
Da muss ich user profile iconjaenicke Recht geben, hab mir, da ich das Thema weiter verfolgt hab, eben die Seite angeschaut, den Text nicht gelesen (tu ich eh nie) und den Quellcode gesucht, peng, fertig aus :)

Zum Quellcode: Funzt bei mir einwandfrei.

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
blacknight1974 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 27.12.08 00:34 
Hallo Leute!

Es geschehen doch noch Wunder. Dank eurer Geduld habe ich es doch noch hinbekommen.
Ich habe nicht gesehen das >>> procedure TfrmMain.btnLoadTifClick(Sender: TObject); <<< dieses eine OnClick Ereignis eines Buttons ist. Jetzt funktioniert alles. Ich denke jetzt sollte speichern auch kein Problem sein. Das teste ich aber morgen.
Ich danke euch für eure Hilfe und wünsche noch einen guten Rutsch ins neue Jahr.

Gruß
Michael
blacknight1974 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 28.12.08 18:36 
:dance2: :dance2: :dance2: :dance2: :dance2:

Problem gelöst. Das einlesen und das Schreiben einer 32bit Tiff funktioniert.#