Delphi Tips 
-----------------------------

0092  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/02/08 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/02/08 osamu 編集
TBitmap をきれいに印刷する

TBitmap 印刷用手続きの中村@NECさんバージョンです。
StretchDIBits を使うところがミソだそうです。

procedure StretchDrawBitmap(Canvas: TCanvas;  // 描画先キャンバス
                            r: TRect;         // 描画先の範囲
                            Bitmap: TBitmap   // ビットマップ
                            );
var OldMode:   Integer;     // StretchMode のセーブ
    Info:      PBitmapInfo; // DIB ヘッダ + カラーテーブル
    InfoSize:  Integer;     // DIB ヘッダ + カラーテーブル
    Image:     Pointer;     // DIB のピクセルデータ
    ImageSize: Integer;     // DIB のピクセルデータのサイズ。
begin
  // DIB の「ヘッダ+カラーテーブル」の大きさと ピクセル
  // データの大きさを求める
  GetDIBSizes(Bitmap.Handle, InfoSize, ImageSize);
  Info := Nil;
  Image := Nil;
  try
    // DIB 用のメモリーを確保
    Info := AllocMem(InfoSize);
    Image := Allocmem(ImageSize);

    // DIB を取り出す
    GetDIB(Bitmap.Handle, Bitmap.Palette, Info^, Image^);

    // 描画!!
    OldMode := SetStretchBltMode(Canvas.Handle, COLORONCOLOR);
    StretchDIBits(Canvas.Handle,
                  r.Left, r.Top,
                  r.Right - r.Left, r.Bottom - r.Top,
                  0, 0, Info^.bmiHeader.biWidth,
                  Info^.bmiHeader.biHeight,
                  Image, Info^, DIB_RGB_COLORS, SRCCOPY);
    SetStretchBltMode(Canvas.Handle, OldMode);
  finally
    if Info <> Nil then FreeMem(Info);
    if Image <> Nil then FreeMem(Image);
  end;
end;
参照: [Delphi-ML:20572] <印刷> <画像>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp