2012-06-21 18 views
5

デジタルカメラから新鮮な画像は、2-3MBのサイズを超えることが多く、電子メールやその他の方法で転送することは困難です。 イメージのサイズを変更する必要があります(ファイルのサイズで、高さや幅ではありません)。画像のサイズ変更機能を提供するMS Paintによく似ています。 私は画像ファイルの理論について十分に教育されていません。C#を使用した画像のサイズ変更

  • 画像理論(各種画像形式はTIFFなどJPEG、PNGを、どのように働くか):誰かが情報源を次の方に私を指すことができれば私は幸いですか。?

  • サイズを変更すると画像のシャープネスはどのように失われますか?いくつかありますか

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

多くのおかげで、

+0

"色化" http://en.wikipedia.org/wiki/Color_quantization – BryanJ

+0

ビットマップ(画像、幅、高さ)コンストラクタ上に読みますそれほど信じられない仕事をしています。 –

+0

しかし、質が悪いです。 –

答えて

24

画像のサイズ変更は、機能は右の.NETフレームワークに組み込まれています。

  • WPF

    • GDI +
    • WICここではそれらの違いをカバーする素敵blog postです:異なるアプローチがいくつかあります。

      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); 
           } 
          } 
      } 
      
  • +0

    ありがとうダーリン。私は幅と高さを数字で言及したくありません。むしろ、彼らはパーセンテージで言及されるでしょう。これを使うには、既存の画像の高さの幅を(おそらく)計算しなければなりません。 – James

    +0

    はい、 'srcImage'をロードした後でこれを行うことができます。最初と2番目の 'using'ステートメントの間。あなたはsrcImage.WidthとsrcImage.Heightを使ってビットマップコンストラクタに渡されたnewWidthとnewHeightを計算します。 –

    +0

    例を使って投稿を更新しました。 –

    7

    私はダーリンディミトロフによって提供された例を使用し、 画像を(1.5メガバイトから17メガバイトに程度)まで膨張し、ディスクスペースの多くを取り上げました。

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

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

    newImage.Save(outputFile) 
    

    正しい機能がなければならない:

    newImage.Save(outputFile, ImageFormat.Jpeg); 
    
    関連する問題