AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim Drucken von Bildern

Ein Thema von easywk · begonnen am 2. Mär 2010 · letzter Beitrag vom 2. Mär 2010
Antwort Antwort
easywk

Registriert seit: 9. Jul 2003
Ort: Schwanewede
117 Beiträge
 
Delphi 7 Enterprise
 
#1

Probleme beim Drucken von Bildern

  Alt 2. Mär 2010, 14:55
Moin, moin,

in meinen Programmen haben die Anwender die Möglichkeit, Bilder in die Druckausgabe einzubinden. Meistens wird das in den Fusszeilen der Seiten verwendet. Dabei benutze ich die folgenden Funktionen, wobei PrintIt() die Funktion ist, die ich aufrufe:

Delphi-Quellcode:
procedure PrintBild(DestRect:TRect; Image:TImage);
var BitmapHeader:pBitmapInfo; BitmapImage:POINTER; Bitmap:TBitmap;
    HeaderSize,ImageSize:DWORD;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.Width:=Image.Picture.Width;
    Bitmap.Height:=Image.Picture.Height;
    Bitmap.PixelFormat:=pf24bit;
    // Convert GIF (JPEG, or whatever) to BMP
    Bitmap.Canvas.Draw(0,0, Image.Picture.Graphic);
    GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize);
    GetMem(BitmapHeader, HeaderSize);
    GetMem(BitmapImage, ImageSize);
    try
      GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^);
      StretchDIBits(Printer.Canvas.Handle,
                    DestRect.Left, DestRect.Top, // Destination Origin
                    DestRect.Right - DestRect.Left, // Destination Width
                    DestRect.Bottom - DestRect.Top, // Destination Height
                    0, 0, // Source Origin
                    Bitmap.Width, Bitmap.Height, // Source Width & Height
                    BitmapImage,
                    TBitmapInfo(BitmapHeader^),
                    DIB_RGB_COLORS,
                    SRCCOPY)
    finally
      FreeMem(BitmapHeader);
      FreeMem(BitmapImage)
    end
  finally;
    Bitmap.Free;
  end;
end;

procedure PrintIt(Filename:String; BildHoeheMillimeter,BildBreiteMillimeter:Integer);
var Img:TImage; Rect:TRect; cnt,bb,bh:INTEGER;
begin
  Img:=TImage.Create(NIL);
  Img.Picture.LoadFromFile(Inhalt.Inhalt);
  bh:=Trunc(BildHoeheMillimeter*PixelsPerInch.X/25.4);
  bb:=Trunc(BildBreiteMillimeter*PixelsPerInch.X/25.4);
  if bb=0 then // ggfs. Seitenverhältnisse beibehalten
    bb:=Round(bh*(Img.Picture.Width/Img.Picture.Height));
  if bh=0 then // ggfs. Seitenverhältnisse beibehalten
    bh:=Round(bb*(Img.Picture.Height/Img.Picture.Width));
  // x,y = aktuelle Position auf dem Papier
  Rect.Top:=y;
  Rect.Bottom:=y+bh;
  Rect.Left:=x;
  Rect.Right:=x+bb;
  PrintBild(Rect,Img);
  Img.Free;
end;
Nun zu meinem Problem:

die Anwender berichten mir, dass es immer wieder vorkommt, dass das Bild nicht gedruckt wird. Anstelle des Bildes wird ein schwarzer Kasten gedruckt, der genau der Bildgröße entspricht. Das Ganze ist nicht reproduzierbar. Sehr oft tritt es gar nicht auf, manchmal ab Seite 10, manchmal auch erst ab Seite 100. Wenn es auftritt, kann es nur "repariert" werden, in dem das Programm beendet wird. Ich selber habe das Problem noch nie gehabt, kann es also auch nicht debuggen. Der Fall wurde auch bei unterschiedlichen Druckern und sogar bei PDF-Erzeugern berichtet.

Kann jemand anhand des Codes was "böses" sehen oder hat eine Idee, wo das Verhaltern herkommt? Bin für jede Idee dankbar

cu
easy
Björn
if all else fails - read the instructions
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Probleme beim Drucken von Bildern

  Alt 2. Mär 2010, 17:06
Mir fällt auf, dass du TImage verwendest obwohl hier eigentlich TPicture verwendet werden sollte:
procedure PrintBild(DestRect:TRect; {Image:TImage}Picture:TPicture); Und später:
Delphi-Quellcode:
procedure PrintIt(Filename:String; BildHoeheMillimeter,BildBreiteMillimeter:Integer);
var Pict:TPicture;
  Rect:TRect; cnt,bb,bh:INTEGER;
begin
  Pict:=TPicture.Create;
  try
    Pict.LoadFromFile(Inhalt.Inhalt);
    ...
    PrintBild(Rect,Pict);
  finally
    Pict.Free;
  end;
end;
Das ist jetzt noch nicht die Lösung deines Problems, aber der Code ist so zumindest sauberer.
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:02 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