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;
> Image.Canvas.Handle,0, 0,Image.Width, Image.Height, SRCCOPY);
Image.Picture.Bitmap.Canvas.Handleでは?
> Image.Picture.Bitmap.Canvas.Handleでは?
何も変わりありませんでした。
> Image.Picture.Bitmap.Assign(TempBmp);
ここの前にTempBmpをファイルに保存したら、中身はちゃんとある?
>> Image.Picture.Bitmap.Assign(TempBmp);
>ここの前にTempBmpをファイルに保存したら、中身はちゃんとある?
TempBmp.SaveToFile('c:\aaa.bmp');
を追加したところ、aaa.bmp には拡大された画像が保存されました。
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;
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さん、どうもありがとうございました。
ツイート | ![]() |