画像を拡大して印刷するには?

解決


マリモ  2006-10-18 07:28:41  No: 23585

Imageの画像を拡大して、印刷処理を行いたいのですが

『Microsoft Office Document Image Writer』に出力すると、うまく印刷されています。
直接プリンターに出力すると、印刷されません。

直接プリンターに出力したいのですが、何が原因で、どのように解決すればよいのか分かりません。

御存知の方あれば宜しくお願いします。

環境は Delphi5  WinXPです。
TNkPrinterコンポーネントを使用しています。

procedure StretchImage(Image : TImage);
var
  TempBmp : Tbitmap;
begin
  TempBmp :=TBitmap.Create;

  TempBMP.Width := 1900;
  TempBMP.Height := 800;

  StretchBlt(TempBmp.Canvas.Handle,0,0,Tempbmp.Width,TempBmp.Height,
             Image.Canvas.Handle,0, 0,Image.Width, Image.Height, SRCCOPY);

  Image.Picture.Bitmap.Assign(TempBmp);
  TempBmp.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  BMP : TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    StretchImage(Image1);

    Bmp.Assign(Image1.Picture);

    NkPrinter.BeginDoc('');

    NkPrinter.Canvas.Draw(1000, 230, BMP);

    NkPrinter.EndDoc;
  finally
    BMP.Free;
  end;
end;


かみづ  2006-10-18 07:55:08  No: 23586

> Image.Canvas.Handle,0, 0,Image.Width, Image.Height, SRCCOPY);

Image.Picture.Bitmap.Canvas.Handleでは?


マリモ  2006-10-18 17:16:07  No: 23587

> Image.Picture.Bitmap.Canvas.Handleでは?

何も変わりありませんでした。


おっふぉ  2006-10-18 17:35:49  No: 23588

>   Image.Picture.Bitmap.Assign(TempBmp);

ここの前にTempBmpをファイルに保存したら、中身はちゃんとある?


マリモ  2006-10-18 19:15:01  No: 23589

>>   Image.Picture.Bitmap.Assign(TempBmp);

>ここの前にTempBmpをファイルに保存したら、中身はちゃんとある?

  TempBmp.SaveToFile('c:\aaa.bmp');

を追加したところ、aaa.bmp には拡大された画像が保存されました。


SON705  2006-10-18 23:43:59  No: 23590

TNkPrinterコンポーネントを持っていないので印刷はノーチェックですが、
下記の方法ではどうでしょうか?

procedure TForm1.Button1Click(Sender: TObject);
var
        DstRect: TRect;
        Dst: TImage;
begin
    Dst := TImage.Create( Self );
    Dst.Width  := 1900;
    Dst.Height :=  800;
    DstRect := Rect( 0, 0, Dst.Width, Dst.Height );
    Dst.Canvas.StretchDraw( DstRect, Image1.Picture.Bitmap );

    NkPrinter.BeginDoc('');
    NkPrinter.Canvas.Draw( 1000, 230, Dst.Picture.Bitmap );
    NkPrinter.EndDoc;

    Dst.Free;
end;


マリモ  2006-10-19 03:34:51  No: 23591

procedure StretchImage(Image : TImage);
を使用せずに

NkPrinter.Canvas.StretchDraw(Rect(0, 0, 1900, 800),Image1.Picture.Bitmap);

としてみると、うまく拡大印刷されました。

http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/graphics/PaintImage.htm
↑にDrawメソッドの第三パラメーターはTGraphic型で、TGraphic型は抽象クラスのため、インスタンス化できないということでした。

しかし、StretchDrawもTGraphic型ですよね・・・?

SON705さんの方法も検証してみました。
NkPrinter.Canvas.Draw( 1000, 230, Dst.Picture.Bitmap );
では印刷されず、現象は変わりありませんでした。

Delphiのヘルプに
「グラフィックを実際のサイズで描画するには,StretchDraw ではなく Draw メソッドを使います。」
とありましたが、サイズ変更したイメージは、Drawメソッドでは描画できないということでしょうか?

とりあえず、印刷できましたので解決とします。

かみづさん、おっふぉさん、SON705さん、どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加