0

Bitmap.Clone()を使用して画像をトリミングすると、元の画像よりも大きな出力が作成されます。サイズ
元のサイズは:5 M
、出力のトリミングされた画像は:28 M

品質を損なうことなく、大きなサイズなしでトリミングを行うにはどうすればよいですか?私のコードは:

private static Image cropImage(Image img, Rectangle cropArea)
{
  var bmpImage = new Bitmap(img);
  Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);
  img.Dispose();
  bmpCrop.Save(@"D:\Work\CropImage\CropImage\crop.jpg",bmpImage.RawFormat );
  return (Image)(bmpCrop);
}

 static void Main(string[] args)
        {
            string sourceimg = @"D:\Work\Crop Image\CropImage\4032x5808.jpg";
            Image imageoriginal = Image.FromFile(sourceimg);
            int HorX,HorY,VerX,VerY;
            Console.WriteLine("Enter X 1 Cor. ");
            HorX=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter Y 1 Cor. ");
            HorY=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter X 2 Cor. ");
            VerX=int.Parse(Console.ReadLine());
            Console.WriteLine("Enter Y 1 Cor. ");
            VerY= int.Parse(Console.ReadLine());
            Rectangle rect = new Rectangle(HorX,HorY,VerX,VerY);
            cropImage(imageoriginal, rect);
        }
4

2 に答える 2

6

おそらく入力形式であるjpgまたはpngではなく、ビットマップとして画像を保存しています。形式の種類を変更すると、ファイル サイズが急激に減少します。

このコードサンプルは、品質を設定するのに役立ちます:-

var qualityEncoder = Encoder.Quality;
var quality = (long)<desired quality>;
var ratio = new EncoderParameter(qualityEncoder, quality );
var codecParams = new EncoderParameters(1);
codecParams.Param[0] = ratio;
var jpegCodecInfo = <one of the codec infos from ImageCodecInfo.GetImageEncoders() with mime type = "image/jpeg">;
bmp.Save(fileName, jpegCodecInfo, codecParams); // Save to JPG
于 2012-12-31T12:25:32.987 に答える
0

通常は、元の画像の一部を 1:1 の比率で保存するだけなので、トリミング時に品質の低下を心配する必要はありません。

サンプルは正常に動作します - 問題はRectangle入力部分にあるはずです。変数名が紛らわしいので、 MSDNで読むことをお勧めします。

確かに、四角形を初期化するだけです(画像が 1000x900 より大きいと仮定します)これは、左から th ピクセル、上new Rectangle(200,100,800,800);から th ピクセルから始まる領域を、幅と高さがピクセルに等しくなるようにトリミングします。200100800

最終的な品質は同じままで、画像サイズは小さくなります。

于 2012-12-31T13:04:59.763 に答える