喫茶XRAYトップページ


[12535] plPrev.pas の StretchDrawBitmap でイメージを透過したい返信 削除
2019/1/18 (金) 16:31:56 snail3
すみません plPrev.pas を利用して判子を印刷したいのですが
やりかたがわかりません。

StretchDrawBitmap メソッドで StretchDIBits 使って印刷しているのは
わかるのですが、どうしたら透過できるのかさっぱりわかりません。

一応色々なサイトを見てみましたが大きな壁があって跳ね返されています。

馬鹿なおいらにもわかるようなコードをご提示いただけないでしょうか。

よろしくお願いします。 _(._.)_


[12536] Re:plPrev.pas の StretchDrawBitmap でイメージを透過したい返信 削除
2019/1/18 (金) 20:24:20 Mr.XRAY
> StretchDrawBitmap メソッドで StretchDIBits 使って印刷しているのは
> わかるのですが、どうしたら透過できるのかさっぱりわかりません。


ありっ,透過しなかったのか...
ちょぃとお待ちになってくださいませ.

できなければ自力で Canvas への描画ですね.


[12537] Re:plPrev.pas の StretchDrawBitmap でイメージを透過したい返信 削除
2019/1/18 (金) 21:45:22 Mr.XRAY
> StretchDrawBitmap メソッドで StretchDIBits 使って印刷しているのは
> わかるのですが、どうしたら透過できるのかさっぱりわかりません。


失礼しました.確か StretchDIBits って透過描画できないですよね ?
自力で Canvas に描画してください.
StretchDIBits を使用しているコードがあるのは,大量のビットマップ画像を
印刷すると描画抜けがあったからです (プレビューでは表示できても).
今なら多分大丈夫ではないかと,

その他にも TplPrev というか TplSetPrinter のプリンタ名も,Windows 2K 時代
までは面倒なことがありましたが,今は TplSetPrinter のコードを使用しなくても
簡単に取得できます.


[12538] Re2:plPrev.pas の StretchDrawBitmap でイメージを透過したい返信 削除
2019/1/18 (金) 22:08:47 Mr.XRAY
> 自力で Canvas に描画してください.

こんな感じでしょうか.

procedure TForm1.Button1Click(Sender: TObject);
var
  LFilePath : string;
  LBitmap   : TBitmap;
begin
  LFilePath := ExpandFileName('502.bmp');

  LBitmap := TBitmap.Create;

  //印刷用のコードを書く
  plPrev1.BeginDoc;
  try
    plPrev1.Canvas.Font.Height := 180;
    plPrev1.Canvas.TextOut(200, 300, '印刷プレビューの簡単なテスト');

    LBitmap.LoadFromFile(LFilePath);
    LBitmap.Transparent := True;
    plPrev1.Canvas.StretchDraw(Rect(300, 300, 1300, 1300), LBitmap);
  finally
    plPrev1.EndDoc;
    FreeAndNil(LBitmap);
  end;


  //プレビューフォームのサイズと位置を設定
  //自動生成なので,そのためのプロパティがある
  //指定しなければデフォルト値となる
  plPrev1.FormPosition := poDesktopCenter;
  plPrev1.FormWidth    := 600;
  plPrev1.FormHeight   := 450;

  //プレビュー開始
  plPrev1.ShowModal;
end;

上の図が描画しているビットマップ画像です.


[12542] Re3:plPrev.pas の StretchDrawBitmap でイメージを透過したい返信 削除
2019/1/20 (日) 21:42:53 snail
▼ Mr.XRAYさん
> > 自力で Canvas に描画してください.
>
> こんな感じでしょうか.


なんとかできました。
実は元ファイルでは TBitmap ではなく TImage を利用していました。

  WImage.Picture.Bitmap.Transparent := True;  // 背景透過。

で自分では透過させていたつもりが変更されていませんでした。

  WImage.Transparent := True;                 // 背景透過

結局親を透過モードにすることでできました。

あと作ったプログラムを実行したところ透過できたプリンターと
駄目なプリンターが存在しました。

正しく透過されたプリンター
・ブラザー MFC-J727D
・Windows10 Microsoft Print to PDF

駄目だったプリンター
・CubePDF

という結果になりました。

ありがとうございました。



[12543] Re4:plPrev.pas の StretchDrawBitmap でイメージを透過したい返信 削除
2019/1/20 (日) 22:09:04 Mr.XRAY
▼ snailさん

> あと作ったプログラムを実行したところ透過できたプリンターと
> 駄目なプリンターが存在しました。


情報ありがとうございます.
そういうのがあるんですね.
今後の研究材料としたいと思います.


INCM/CMT
Cyclamen v3.82