Announcement

Collapse
No announcement yet.

Rot und Blau in einer Bitmap vertauschen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rot und Blau in einer Bitmap vertauschen?

    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

  • #2
    <PRE>
    var
    ScanLineCounter: Integer;
    CurrentScanLine: PByteArray;
    b:byte;
    spalte:integer;
    const n=0; //0..2 vertauscht byte n mit m im Pixel
    m=1;

    begin
    Bitmap.PixelFormat := pf24Bit; for ScanLineCounter := 0 to Bitmap.Height - 1 do
    begin
    CurrentScanLine := Bitmap.ScanLine[ScanLineCounter];

    for spalte:=0 to Bitmap.width-1 do
    begin
    b:=CurrentScanLine[3*spalte+n];
    CurrentScanLine[3*spalte+n]:=CurrentScanLine[3*spalte+m];
    CurrentScanLine[3*spalte+m]:=b;

    end;
    ImageStream.Write(CurrentScanLine^, Bitmap.Width * 3);
    end;

    </PRE&gt

    Comment


    • #3
      Karsten,

      recht herzlichen Dank... mit n=0 und m=2 funktioniert es!

      Ralp

      Comment

      Working...
      X