Tach zusammen,
ich verwende K. Nishita's TNPDF.pas als Basis für meine PDF-Ausgabe. Im Readme schreibt der Autor, dass es Probleme mit der Farbausgabe bei Bitmaps gibt, weil er den Mechanismus nicht verstanden hat. Nun geht es mir genau so <g>.
Eine Bitmap, die ich mit dieser Routine aus meiner Applikation in eine PDF-Datei schreibe, wird im Acrobat Reader tatsächlich falsch dargestellt: Blau wird als rot, und rot wird als blau angezeigt. Grün stimmt.
Kann es sein, dass der Acrobat Reader die Reihenfolge der RGB-Triples anders erwartet als Windows bzw. Delphi (bzw. ich <g>). Oder stimmt da was mit der ColorTable nicht?
So sieht der Code aus:
Die Bitmap wird zeilenweise per Scanline gelesen und in einen Stream geschrieben:
<PRE>
var
ScanLineCounter: Integer;
CurrentScanLine: PByteArray;
Bitmap.PixelFormat := pf24Bit;
for ScanLineCounter := 0 to Bitmap.Height - 1 do
begin
CurrentScanLine := Bitmap.ScanLine[ScanLineCounter];
ImageStream.Write(CurrentScanLine^, Bitmap.Width * 3);
end;
</PRE>
Wäre es eine gute Idee, die Werte von Rot und Blau vor dem Schreiben in den Stream zu vertauschen - und wenn ja, wie?
TIA für jede Hilfe
Ralph
ich verwende K. Nishita's TNPDF.pas als Basis für meine PDF-Ausgabe. Im Readme schreibt der Autor, dass es Probleme mit der Farbausgabe bei Bitmaps gibt, weil er den Mechanismus nicht verstanden hat. Nun geht es mir genau so <g>.
Eine Bitmap, die ich mit dieser Routine aus meiner Applikation in eine PDF-Datei schreibe, wird im Acrobat Reader tatsächlich falsch dargestellt: Blau wird als rot, und rot wird als blau angezeigt. Grün stimmt.
Kann es sein, dass der Acrobat Reader die Reihenfolge der RGB-Triples anders erwartet als Windows bzw. Delphi (bzw. ich <g>). Oder stimmt da was mit der ColorTable nicht?
So sieht der Code aus:
Die Bitmap wird zeilenweise per Scanline gelesen und in einen Stream geschrieben:
<PRE>
var
ScanLineCounter: Integer;
CurrentScanLine: PByteArray;
Bitmap.PixelFormat := pf24Bit;
for ScanLineCounter := 0 to Bitmap.Height - 1 do
begin
CurrentScanLine := Bitmap.ScanLine[ScanLineCounter];
ImageStream.Write(CurrentScanLine^, Bitmap.Width * 3);
end;
</PRE>
Wäre es eine gute Idee, die Werte von Rot und Blau vor dem Schreiben in den Stream zu vertauschen - und wenn ja, wie?
TIA für jede Hilfe
Ralph
Comment