web-dev-qa-db-ja.com

C#を使用した画像のサイズ変更

デジタルカメラから出力されたばかりの画像は、多くの場合2〜3 MBのサイズを超えているため、電子メールやその他の方法で転送するのは困難です。これには、画像のサイズを変更する必要があります(高さや幅ではなく、ファイルサイズの観点から)。画像のサイズ変更機能を提供するMSペイントと非常によく似ています。私は画像ファイル理論について十分な教育を受けていません。誰かが私を次の情報源に向けることができれば幸いです:

  • 画像理論(さまざまな画像形式がjpeg、png、tiffなどでどのように機能するか)?

  • サイズを変更すると、画像の鮮明さがどのように失われますか?ありますか

  • これを行うために利用できる無料の.Net(私は4.0を使用しています)ライブラリはありますか?そうでない場合は、comの相互運用性を使用してライブラリを使用できますか?

どうもありがとう、

8
James

画像のサイズ変更は、機能が.NETFrameworkに直接組み込まれていることです。いくつかの異なるアプローチがあります:

  • GDI +
  • WIC
  • WPF

これがいいですね ブログ投稿 それらの違いをカバーしています。

GDI +の例を次に示します。

public void Resize(string imageFile, string outputFile, double scaleFactor)
{
    using (var srcImage = Image.FromFile(imageFile))
    {
        var newWidth = (int)(srcImage.Width * scaleFactor);
        var newHeight = (int)(srcImage.Height * scaleFactor);
        using (var newImage = new Bitmap(newWidth, newHeight))
        using (var graphics = Graphics.FromImage(newImage))
        {
            graphics.SmoothingMode = SmoothingMode.AntiAlias;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
            graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
            newImage.Save(outputFile);
        }
    }
}
35
Darin Dimitrov

私はDarinDimitrovによって提供された例を使用しました。イメージは膨らみ、多くのディスクスペース(1.5MBから17MB程度)を占有しました。

これは、コードの最後の行にある小さな間違いが原因です。

以下の関数は、画像をビットマップ(巨大な画像サイズ)として保存します。

newImage.Save(outputFile)

正しい関数は次のとおりです。

newImage.Save(outputFile, ImageFormat.Jpeg);
9
Dima Sherba

Imageresizerはうまく機能します。 http://imageresizing.net/

2
Remy