Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Probleme bei Ausdruck von Bitmaps (https://www.delphipraxis.net/20093-probleme-bei-ausdruck-von-bitmaps.html)

Interface11 13. Apr 2004 16:49


Probleme bei Ausdruck von Bitmaps
 
Hallo zusammen !

Hier mein Quellcode:

image1.picture.LoadfromFile(Query1.fieldbyname('Bi ld1').asstring);
image2.picture.LoadfromFile(Query1.fieldbyname('Bi ld1').asstring);

pix_mm := Printer.Pagewidth div 214;

rect1.TopLeft.x := 14 * pix_mm;
rect1.TopLeft.y := 43 * pix_mm;
rect1.BottomRight.x := 44 * pix_mm;
rect1.BottomRight.y := 72 * pix_mm;

canvas.stretchDraw(rect1,image1.picture.Graphic);

rect1.Left := x + 228;
rect1.Top := y - 98;
rect1.Right := x + 792;
rect1.Bottom := y + 462;

canvas.stretchDraw(rect1,image2.picture.Graphic);

Unter Windows NT werden beide Grafiken ohne
Probelme gedruckt !

Unter Windows 98 wird die erste Grafik (BMP) mal gedruckt,
mal nicht.

Habe deshalb zwei Fragen:

1. Was ist hier zu tun, um die Grafiken unter jedem
Betriebssystem einwandfrei zu drucken ?

2. Liegt es vielleicht am StretchDraw Befehl ?

Vielen Dank und Grüße

Dirk
:shock:

neolithos 13. Apr 2004 17:18

Re: Probleme bei Ausdruck von Bitmaps
 
Ich denke es liegt an StretchDraw. Das macht unter ein Win9x Probleme, wenn Bilder zu groß sind oder werden sollen.

shmia 13. Apr 2004 18:04

Re: Probleme bei Ausdruck von Bitmaps
 
Zitat:

Zitat von Interface11
rect1.Left := x + 228;
rect1.Top := y - 98;
rect1.Right := x + 792;
rect1.Bottom := y + 462;

Du arbeitest einmal in mm und das andere Mal in Pixeln.
Du solltest immer im mm-System bleiben.

Delphi-Quellcode:
unit PrtScaling;
{
Printer scaling functions
Andreas Schmidt

use this functions only between
printer.BeginDoc and printer.EndDoc
}

interface

uses Printers;

function ConvertMmToPixelsX(const Value:Double):Integer;
function ConvertMmToPixelsY(const Value:Double):Integer;
function ConvertInchToPixelsX(const Value:Double):Integer;
function ConvertInchToPixelsY(const Value:Double):Integer;

implementation

uses Windows;

const mmPerInch = 25.4;


function GetPrinterRes(const pobj: TPrinter; Horz: Boolean): integer;
var
   Index: Integer;
begin
   if Horz then
      Index:=LOGPIXELSX
   else
      Index:=LOGPIXELSY;
   Result:=GetDeviceCaps(pobj.Handle, Index);
end;


function ConvertMMtoPixelsX(const Value:Double):Integer;
begin
   Result := Round(Value*GetPrinterRes(Printer, True) / mmPerInch);
end;

function ConvertMMtoPixelsY(const Value:Double):Integer;
begin
   Result := Round(Value*GetPrinterRes(Printer, False) / mmPerInch);
end;

function ConvertInchtoPixelsX(const Value:Double):Integer;
begin
   Result := Round(Value*GetPrinterRes(Printer, True));
end;

function ConvertInchtoPixelsY(const Value:Double):Integer;
begin
   Result := Round(Value*GetPrinterRes(Printer, False));
end;

end.

Interface11 20. Apr 2004 16:50

Re: Probleme bei Ausdruck von Bitmaps
 
Hi habe alles umgerechnet funktioniert leider aber immer noch nicht ! :shock:

Muetze1 20. Apr 2004 20:30

Re: Probleme bei Ausdruck von Bitmaps
 
Moin!

StretchDraw, BitBlt, etc werden nicht von allen Druckertreibern unterstützt - das ist das Problem. Dabei tritt es oft auch schon bei dem gleichen Drucker und unterschiedlichen Windows Versionen auf.

Folgender Weg macht das immer:
Code:
  // Based on posting to borland.public.delphi.winapi by Rodney E Geraghty,
  // 8/8/97. Used to print bitmap on any Windows printer.
  PROCEDURE PrintBitmap(Canvas: TCanvas; DestRect: TRect; Bitmap: TBitmap);
    VAR
      BitmapHeader: pBitmapInfo;
      BitmapImage : POINTER;
      HeaderSize : DWORD;   // Use DWORD for compatibility with D3-D5
      ImageSize  : DWORD;
  BEGIN
    GetDIBSizes(Bitmap.Handle, HeaderSize, ImageSize);
    GetMem(BitmapHeader, HeaderSize);
    GetMem(BitmapImage, ImageSize);
    TRY
      GetDIB(Bitmap.Handle, Bitmap.Palette, BitmapHeader^, BitmapImage^);
      StretchDIBits(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
  END {PrintBitmap};
Wie der Code angibt, aus der borland delphi newsgroup.

MfG
Muetze1

Interface11 29. Apr 2004 10:29

Re: Probleme bei Ausdruck von Bitmaps
 
Hi,

Dein Tip war ein voller Erfolg, hab vielen Dank !!

Grüße Dirk :-D

generic 30. Jan 2006 12:55

Re: Probleme bei Ausdruck von Bitmaps
 
der obige code macht bei uns unter winxp probleme. wir drucken schwarz/weiss bitmaps und es kommt manchmal vor das die strechbld eine weiss oder schwarze seite druckt.
ich hab bei uns auf gdi+ umgestellt.
der fehler tritt nur auf wenn man viel druckt und ist leider nicht repoduzierbar.

aps 12. Feb 2006 20:09

Re: Probleme bei Ausdruck von Bitmaps
 
Problem hat sich soeben aufgehoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 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