4

サードパーティのライブラリがなければ、これがどれほど実現可能かはわかりませんが、次のようになります。

印刷しようとしているサイズが450x900の画像があります。
問題は、私が印刷に使用している方法は、生データをプリンターに送信することです。
画像の解像度は96dpix96dpiで、プリンターは203dpiで動作します。
だから...画像が小さく出てきます。

「実際の」サイズで印刷するには、画像のdpiを上げる必要があります。

Bitmap b0 = LoadBitmap();

//I need to rotate it because for some odd reason it prints backwards and upside down.
b0.RotateFlip(RotateFlipType.Rotate180FlipX);

//Set a new resolution, 203dpi
b0.SetResolution(203, 203);

//I need to save and reload the bitmap, because RotateFlip compresses it.
//(annoying as hell, took me ages to figure out why it wasn't working.)
Stream imgStream = new MemoryStream();
b0.Save(imgStream, ImageFormat.Bmp);
b0 = new Bitmap(imgStream);

//get my byte array
ImageConverter converter = new ImageConverter();
byte[] imageData = (byte[])converter.ConvertTo(b0, typeof(byte[]));

ですから、かなり簡単です。しかし、SetResolution(...)は実際には何もしていないようです。画像はまったく同じサイズで印刷され、結果のバイト配列はまったく同じサイズになります。

だから私はそれが実際に何をしているのかを解明しようとしています。
しかし、私が望むことを行うには、すべての画像データを余分なピクセルで埋める必要があると思いますか?

これが実用的な方法ではない場合、目的の効果を得るために使用できる簡単なストレッチ方法などはありますか?

4

2 に答える 2

9

画像を拡大して大きくしてみませんか。

        System.Drawing.Bitmap b0 = LoadBitmap();
        double scale = 203/96;
        int width = (int)(b0.Width * scale);
        int height = (int)(b0.Height * scale);
        System.Drawing.Bitmap bmpScaled = new System.Drawing.Bitmap(b0,width, height);
于 2012-07-25T11:26:49.967 に答える
3

ビットマップの解像度 (dpi) を変更するだけでは、そのピクセル コンテンツには影響しないことを理解する必要があります。ビットマップの場合、「解像度」はメタデータのみです。本当に重要なのはピクセル単位のサイズです。

したがって、写真を大きく印刷したい場合は、プリンターの解像度を変更するか、画像を拡大/縮小する必要があります (たとえば、Grzegorz の方法を使用します)。

于 2012-07-25T11:29:57.897 に答える