Einzelnen Beitrag anzeigen

teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#4

AW: Druckt PowerPDF Komponente fehlerhaft?

  Alt 30. Mär 2012, 11:56
Habe den Fehler in der Komponente (in PdfJpegImage.pas) gefunden, es wird immer ColorSpace DeviceRGB ins PDF geschrieben, auch wenn es ein Graustufen-JPEG ist. Der Reader findet dann natürlich nicht genug Daten. Alle Bilder, die in Deinem Beispiel nicht funktionieren, sind Graustufen-JPEGs.

Delphi-Quellcode:
// CreateImage
function TPdfJpegImage.CreateImage(AImage: TGraphic): TPdfImage;
begin
  // check whether specified graphic is valid image.
  if not (AImage is TJpegImage) then
    raise EPdfInvalidValue.Create('only jpeg image is allowed.');

  result := TPdfImage.CreateStream(nil);
  with result do
  try
    TJpegImage(AImage).SaveToStream(Stream);
    with Attributes do
    begin
      AddItem('Type', TPdfName.CreateName('XObject'));
      AddItem('Subtype', TPdfName.CreateName('Image'));

      // Hier auf Graustufen prüfen
      If TJpegImage(Aimage).Grayscale Then
       AddItem('ColorSpace', TPdfName.CreateName('DeviceGray'))
      Else
       AddItem('ColorSpace', TPdfName.CreateName('DeviceRGB')); // ursprünglich wird immer RGB geschrieben

      AddItem('Width', TPdfNumber.CreateNumber(AImage.Width));
      AddItem('Height', TPdfNumber.CreateNumber(AImage.Height));
      AddItem('BitsPerComponent', TPdfNumber.CreateNumber(8));
      PdfArrayByName('Filter').AddItem(TPdfName.CreateName('DCTDecode'));
    end;
  except
    result.Free;
    raise;
  end;
Gruß, teebee
  Mit Zitat antworten Zitat