【解決方法】ビットマップをトリミングして元の品質で保存する方法は?


ビットマップをトリミングして元の品質で保存するにはどうすればよいですか? ビットマップの高さは 592、幅は 699 にする必要があります。
varas.ptval は元のビットマップです。

私が試したこと:

C#
Rectangle rectangle = new Rectangle();
rectangle.Height = 100;
rectangle.Width = 100;
rectangle.X = 100;
rectangle.Y = 100;

Bitmap temp = new Bitmap(varas.ptval, varas.ptval.Width,varas.ptval.Height);
temp = varas.ptval;
var croppedImagem = cropBitmap(temp, rectangle);
croppedImagem.Save(paths + "\\" + "SPR_" + i + ".jpeg", ImageFormat.Jpeg);
                           

 public static Bitmap CropBitmap(Bitmap bitmap, int x, int y, int w, int h)
        {
            Rectangle rect = new Rectangle(x, y, w, h);
            Bitmap cropped = bitmap.Clone(rect, bitmap.PixelFormat);
            return cropped;
        }

解決策 1

ビットマップは「非可逆形式」ではないため、トリミングしても品質は変わりません。新しいビットマップに含まれる領域が変わるだけです。

ただし、JPEG (または jpg) は損失の多い形式です。画像を .JPG または .JPEG ファイルに保存すると、保存するたびに品質が低下します。 実際、画像を JPG として繰り返し読み込んで保存するだけで、画像を完全に破壊できます。

品質を維持したい場合は、JPEG ではなく、BMP、PNG、または TIFF などの非損失形式を使用してください。

解決策 2

ビットマップをトリミングして元の品質で保存するには、定義した CropBitmap メソッドを使用できます。 元のビットマップとトリミングする領域を表す四角形を引数としてメソッドに渡すだけです。

CropBitmap メソッドを使用してビットマップをトリミングし、元の品質で保存する方法の例を次に示します。

var originalBitmap = varas.ptval;<br />
<br />
// Create a rectangle representing the area you want to crop<br />
Rectangle rectangle = new Rectangle(100, 100, 100, 100);<br />
<br />
// Crop the bitmap using the CropBitmap method<br />
Bitmap croppedBitmap = CropBitmap(originalBitmap, rectangle);<br />
<br />
// Save the cropped bitmap to a file in JPEG format<br />
croppedBitmap.Save(paths + "\\" + "SPR_" + i + ".jpeg", ImageFormat.Jpeg);<br />

これにより、ビットマップがトリミングされ、元の品質で指定されたファイル パスに保存されます。 四角形で指定されているように、トリミングされたビットマップのサイズは 100×100 になることに注意してください。 長方形のサイズと位置を調整して、ビットマップを目的のサイズと位置にトリミングできます。

ビットマップをトリミングして元の品質で保存するための修正されたコードは次のとおりです。

var originalBitmap = varas.ptval;<br />
<br />
// Create a rectangle representing the area you want to crop<br />
Rectangle rectangle = new Rectangle(0, 0, 699, 592);<br />
<br />
// Crop the bitmap using the CropBitmap method<br />
Bitmap croppedBitmap = CropBitmap(originalBitmap, rectangle);<br />
<br />
// Save the cropped bitmap to a file in JPEG format<br />
croppedBitmap.Save(paths + "\\" + "SPR_" + i + ".jpeg", ImageFormat.Jpeg);<br />

このコードは、元のビットマップを目的のサイズ (699×592) にトリミングし、指定されたファイル パスに元の品質で保存します。 長方形のサイズと位置を調整して、ビットマップを目的のサイズと位置にトリミングできます。

CropBitmap メソッドでは、個々の x、y、w、および h 引数ではなく、rectangle 引数を使用する必要があることに注意してください。

public static Bitmap CropBitmap(Bitmap bitmap, Rectangle rectangle)<br />
{<br />
    Bitmap cropped = bitmap.Clone(rectangle, bitmap.PixelFormat);<br />
    return cropped;<br />
}<br />

ビットマップをトリミングして元の品質で保存するプロセスを続行するには、次のように CropBitmap メソッドを使用できます。

1. トリミングする領域を表す Rectangle オブジェクトを作成します。 Rectangle クラスには、長方形の左上隅の X 座標と Y 座標、および長方形の幅と高さのプロパティがあります。 これらのプロパティをクロップに必要な値に設定します。

2. CropBitmap メソッドを使用して、Rectangle オブジェクトを使用してビットマップをトリミングします。 このメソッドは、トリミングされた画像を表す新しい Bitmap オブジェクトを返します。

3. Bitmap クラスの Save メソッドを使用して、トリミングした画像をファイルに保存します。 Save メソッドの引数として、目的のファイル パスと目的の画像形式 (JPEG や PNG など) を指定します。

これらの手順を使用して、ビットマップをトリミングして元の品質で保存する方法の例を次に示します。

// Load the original bitmap<br />
var originalBitmap = varas.ptval;<br />
<br />
// Create a rectangle representing the area you want to crop<br />
Rectangle rectangle = new Rectangle(100, 100, 100, 100);<br />
<br />
// Crop the bitmap using the CropBitmap method<br />
Bitmap croppedBitmap = CropBitmap(originalBitmap, rectangle);<br />
<br />
// Save the cropped bitmap to a file in JPEG format<br />
croppedBitmap.Save(paths + "\\" + "SPR_" + i + ".jpeg", ImageFormat.Jpeg);<br />

これにより、元のビットマップが座標 (100, 100) から始まる 100×100 の領域にトリミングされ、指定されたファイル パスに元の品質で保存されます。 長方形のサイズと位置を調整して、ビットマップを目的のサイズと位置にトリミングできます。

コメント

タイトルとURLをコピーしました