AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Verständnisfrage zu Methoden

Ein Thema von Delbor · begonnen am 1. Jun 2018 · letzter Beitrag vom 1. Jun 2018
Antwort Antwort
Seite 1 von 2  1 2   
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 13:30
Delphi-Version: 10.2 Tokyo
Hi zusammen

Ich arbeite gegenwärtig gerade mit der GraphicEx von Mike Lischke, und da ist mir etwas begegnet, für das ich keine Erklärung habe und wofür ich auch in der Embarcadero OnlineHelp keine Andeutung gefunden habe.

Vorneweg : Die Unit GraphicEx weist eine besonderheit auf:
Normalerweise wird in der Zeile, in der ein Prozedurkopf beginnt direkt vor dem Wort procedure ein Pluszeichen eingeblendet, über das sich die Prozedur zusammenklappen lässt - das fehlt bei allen Methoden der Unit.
Ausserdem ist es nicht möglich, von der Prozedur-Implementierungmit <Shift+Ctrl+UP> zur Deklaration, bzw. mit <Shift+Ctrl+Down> in umgekehrter Richtung zu wechseln.

Deklaration und Implementation der Prozedur TTiffGraphic.SaveToStream:

Delphi-Quellcode:
  {$ifdef NewTIFFGraphic}
  // *.tif, *.tiff images
  TTIFFGraphic = class(TGraphicExGraphic)
  private
    FMemory: PByte;
    ...
  protected
    procedure ReadContiguous(tif: PTIFF);
    ...
  public
    class function CanLoad(const Memory: Pointer; Size: Int64): Boolean; override;
    ...
  end;
  {$endif NewTIFFGraphic}
  {$ifdef OldTIFFGraphic}
    TIFDEntry = packed record
      Tag: Word;
      DataType: Word;
      DataLength: Cardinal;
      Offset: Cardinal;
    end;

    TTIFFPalette = array[0..787] of Word;

    TTIFFGraphic = class(TGraphicExGraphic)
    private
      FBasePosition: Int64; //won't be too surprised of more than 2 Gb image...
      FIFD: array of TIFDEntry; // the tags of one image file directory
      ....
      procedure SortIFD;
      procedure SwapIFD;
    public
      class function CanLoad(const Memory: Pointer; Size: Int64): Boolean; override;
      ...
      ...
      procedure SaveToStream(Stream: TStream); override;
      function ReadImageProperties(Stream: TStream; ImageIndex: Cardinal): Boolean; override;
    end;
  {$endif OldTIFFGraphic}

procedure TTIFFGraphic.SaveToStream(Stream: TStream);
begin

end;
Der Vorfahre von TTiffGraphic, TGraphicExGraphic, ist ein Nachkomme von TBitmap.
Im wesentlichen irritiert mich eigentlich die leere Implementation der Prozedur. Daneben stellt sich aber auch die Frage, woran TTiffGraphic erkennt, ob fr die geladene Datei die alte oder die neue Klassenstrutur anzuwenden ist...

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 13:39
Zitat:
Normalerweise wird in der Zeile, in der ein Prozedurkopf beginnt direkt vor dem Wort procedure ein Pluszeichen eingeblendet, über das sich die Prozedur zusammenklappen lässt - das fehlt bei allen Methoden der Unit.
Die IDE scheint etwas Probleme mit der bedingten Compilierung zu haben ({$ifdef ...}
Zitat:
Daneben stellt sich aber auch die Frage, woran TTiffGraphic erkennt, ob fr die geladene Datei die alte oder die neue Klassenstrutur anzuwenden ist...
Anhand von NewTIFFGraphic/OldTIFFGraphic. Müssten irgendwo entsprechend deklariert sein.
Zitat:
Im wesentlichen irritiert mich eigentlich die leere Implementation der Prozedur.
Mich auch.
Markus Kinzler
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 14:02
Hi mkinzler
Danke für die Antwort! Ich habe die Unit nach dem Ausdruck NewTIFFGraphic durchsucht - den gibts nur in den Compileranweisungen.
Wobei - wenn ich das richtig verstanden habe, soll die Prozedure Canload dabei helfen, einen Dateityp nicht über die Endung zu identifizieren, sondern über den Inhalt - ein .PDF hinter einer Bitmap macht aus dieser noch lange kein PDF...
So könnte auch der Aufbau der Datei identifiziert werden.

Grusss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 14:03
Möglicherweise ist die Methode in TGraphicExGraphic als abstract deklariert und muss daher überschrieben werden, auch wenn die Implementation gar nichts tut.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 14:09
Möglicherweise ist die Methode in TGraphicExGraphic als abstract deklariert und muss daher überschrieben werden, auch wenn die Implementation gar nichts tut.
Die Methode wird von TBitmap geerbt.
Markus Kinzler
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 14:12
Hi mkinzler
Danke für die Antwort! Ich habe die Unit nach dem Ausdruck NewTIFFGraphic durchsucht - den gibts nur in den Compileranweisungen.
Wobei - wenn ich das richtig verstanden habe, soll die Prozedure Canload dabei helfen, einen Dateityp nicht über die Endung zu identifizieren, sondern über den Inhalt - ein .PDF hinter einer Bitmap macht aus dieser noch lange kein PDF...
So könnte auch der Aufbau der Datei identifiziert werden.

Grusss
Delbor
Wird in GraphicConfiguration.inc gesetzt.
Markus Kinzler
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 14:14
Hi DeddyH

Die Methode stammt aus TBitmap - darum ist sie auch als overide deklariert. Ursprünglich hatte ich ja versucht, mit SaveToFile zu speichern:
Delphi-Quellcode:
  S := IncludeTrailingPathDelimiter(FAppDataPath) + OldFile;
  P := ChangeFileExt(S,'.Pdf');
  TiffStream := TMemoryStream.Create;

  Tifimage.SaveToFile(S); // Hier sollte das Tiff gespeichert werden
  Self.OCRFrame1.OutputFileName := P; // 2 ropertys beschreiben direkt 2 Felder für den
  Self.OCRFrame1.InputFileName := S; // Quell- und den Zielpfad, den die Fuktion CreatePDF benötigt
  Self.OCRFrame1.OCR2PDF;
Aber weder TTiffgrapic noch TGraphicExGraphic deklarieren sowas - nur logisch, dass meine Dateien zwar angelegt wurden, aber immer leer blieben..

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 14:17
GraphicEx scheint nur für das Laden der Formate zu sorgen (und die Wandlung nach TBitmap). Beim Speichern wird Bitmap gespeichert (oder hat nichts, wie hier)
Markus Kinzler
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 15:06
Hi mkinzler
Zitat:
GraphicEx scheint nur für das Laden der Formate zu sorgen
Das habe ich anders verstanden. Mit Hilfe der Streams ist es möglich, jeden Block einzeln am richtigen Ort zu schreiben. Dazu gibt es in TGraphicExGraphic einen Record THeader:
Delphi-Quellcode:
  type
    PTIFFHeader = ^TTIFFHeader;
    TTIFFHeader = packed record
      ByteOrder: Word;
      Version: Word;
      FirstIFD: Cardinal;
    end;
Der ist aber kein Feld von TTiffGraphic, sondern muss so in denStrem geschrieben werden - zumindest, wenn ich das richtig verstanden habe. Und FirsIFD gibt ja nur die Adresse des ersten IFDs an. Diejenige des zweiten (wenn vorhanden) steht dann im ersten.
ach dieser Deklaration:
procedure SaveToStream(Stream: TStream); override; speichert TTiffGraphic nur den übergebenen Stream. Bleibt noch die Frage: wohin speichere ich den Header - in den zu übergebenden oder in den speichernden Stream...

Eine weitere Frage hätte ich aber noch: Ich hab da noch ein Buch über Dateitypen von 1997 ausgegraben, das das Tiff-Format (Tiff 6.0) beschreibt. Darin enthalten sind zweieinhalb Seiten Beschreibungen der verschiedenen Tagtypen. Brauche ich die Dinger wirklich?
Aktueller Stand ist: Der Scanner liefert Bitmaps. Und die wollte ich in möglichst durchsuchbare PDFs umwandeln und dann in eine Datenbank schreiben. Dabei soll das Bitmap des Scanners so, wie geliefert, in Tiff gewandelt und an Tesseract weitergereicht werden.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Verständnisfrage zu Methoden

  Alt 1. Jun 2018, 15:34
Die leere Methode oder inherited macht aber buchstäblich überhaupt nichts. Möglicherweise war es mal etwas geplant.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:55 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