Thema: Delphi GraphicEx und Packages

Einzelnen Beitrag anzeigen

Delbor

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

AW: GraphicEx und Packages

  Alt 26. Apr 2018, 17:40
Hi mkinzler

Vielen Dank! Habs gleich noch an 2 weiteren Stellen korrigiert.
Aber GraphicEx hat noch nicht genug, wie wiederum der Anhang zeigt.

Delphi-Quellcode:
function TPNGGraphic.IsChunk(ChunkType: TChunkType): Boolean;
// determines, independant of the cruxial 5ths bits in each "letter", whether the
// current chunk type in the header is the same as the given chunk type
const
  Mask = not $20202020;

begin // [dcc32 Fehler] GraphicEx.pas(6797): E2089 Ungültige Typumwandlung
  Result := (Cardinal(FHeader.ChunkType) and Mask) = (Cardinal(ChunkType) and Mask);
end;
Die Deklaration von TChunkTyp:

TChunkType = array[0..3] of Char; Die Deklaration des FHeader-Typs:

Delphi-Quellcode:
  // This header is followed by a variable number of data bytes,which are followed by the CRC for this data.
  // The actual size of this data is given by field length in the chunk header.CRC is Cardinal (4 byte unsigned integer)
  TPNGChunkHeader = packed record
    Length: Cardinal; // size of data (entire chunk excluding itself, CRC and type)
    ChunkType: TChunkType;
  end;
Nachdem ich in den obigen Zeilen dei Funktion TPNGGraphic.IsChunk als letztes eikopiert habe, hab ich die Sache längere Zeit wohl ziemlich dämlich angestarrt und längeere Zeit gar nichts begriffen - bis es mir dann doch zu dämmern schien:
  1. TChunkTyp ist ein Array
  2. Dieses(nicht ein Element daraus!) wird mit Mask verknüpft und
  3. in einen Cardinal geschrieben
Dasselbe geschieht mit dem TPNGChunkHeader-TChunkType-Feld. Dann werden beide Ausdrücke miteinander verglichen und das Resultat an Result zugewiesen. Dieses ist Tue, wenn die beiden Ausdrücke übereinstimmen, ansonsten false.
Soweit so gut, würden da nicht 2 komplette Arrays miteinander verglichen.
Zumindest meines Wissens nach kann man Arrays nur miteinder vergleichen, indem man jedes Item mit dem entsprechende Item des andern Arrays vergleicht - oder allenfalls die Quersummen aus den beiden Arrays, nicht aber die Arays selbst.

Oder sehe ich das falsch?

@hoika
Gerade wollte ich mir die Vorschau anzeigen lassen, als ich deinen Beitrag gesehen habe. Die Unit MZLib verursacht jetzt keine Fehler mehr. Die einzige Frage bliebe also noch, wieviel Sinn sie noch macht, daDelphi selbst schon länger sowas mitbringt.
Der obige Fehler dürfte sich so leicht wie der letzte nicht korrigieren lassen. Da stellt sich die Frage, ob ich all die Klassen, die mit PNG in zusammenhang stehen, nicht aus Graphicex entfernen soll, zumal ich eigentlich zumindest im Moment explizit an der Klasse TTiff interessiert bin.

Gruss
Delbor
Miniaturansicht angehängter Grafiken
17_09_49-e__ungueltige-typumwandlung-graphicex_graphicex.pas.jpg  
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