2017-11-11 14 views
0

私は描画する必要がある解像度6000x4000のPNGイメージを持っています。だから私はサイズ1280x800のpictureBoxにイメージを読み込みます。それを描画した後、元の解像度6000x4000でPNGイメージを保存する必要があります。だから私はWinFormsでサイズ変更されたビットマップイメージを元のサイズに戻す

btm = new Bitmap(6000, 4000); 
image = Graphics.FromImage(btm); 
g.DrawImage(btm, Point.Empty); 

を使用してサイズ6000x4000の新しいビットマップにそれをリロードし

btm.Save(filePath, System.Drawing.Imaging.ImageFormat.Png); 

は、今私は、解像度6000x4000の白い背景のpng画像でなく、編集後の画像で終わる使用してそれを保存します1280x800このようにSaved Image

イメージを元の(6000x4000)サイズに戻すにはどうすればよいですか。ありがとうございました。

また、私codebelowこの程度

private void drawImage(string imgLocation) 
     { 
      Bitmap b = new Bitmap(imgLocation); 

      ////test 
      pictureBox1.Height = 800; 
      pictureBox1.Width = 1280; 

      g = pictureBox1.CreateGraphics(); 

      btm = new Bitmap(6000, 4000); 

      image = Graphics.FromImage(btm); 
      image.CompositingMode = CompositingMode.SourceCopy; 
      image.CompositingQuality = CompositingQuality.HighQuality; 
      image.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      image.SmoothingMode = SmoothingMode.HighQuality; 
      image.PixelOffsetMode = PixelOffsetMode.HighQuality; 
      image.Clear(Color.White);   

      image.DrawImage(b, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height)); 
      //image.DrawImage(btm, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height)); 
      g.SmoothingMode = SmoothingMode.HighQuality; 
      g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      g.PixelOffsetMode = PixelOffsetMode.HighQuality; 
      //g.DrawImage(btm, Point.Empty); 
      g.DrawImage(btm, new Rectangle(0, 0, 6000,4000)); 
     } 
+0

これは簡単です。 DrawImageには多くのオーバーロードがあります。宛先のサイズを指定できるものもあります。 –

+0

ありがとう、私はそれを調べます。可能であれば、これを達成するためのいくつかの例を教えてください。 – SwamJay

+0

** 1)**もしあなたが 'CreateGraphics()'を呼び出すなら、それは間違っています。 ** 2)**描画するときにビットマップを拡大するには、 'Graphics'オブジェクトの変換を設定するか、描画の対象矩形を指定できる' DrawImage() 'オーバーロードを使用します。 ** 3)**あなたが投稿したコードは、 'CreateGraphics()'を呼ぶ以外にも変です。 'bt'を' btm'に描画しますが、 'btm'を' PictureBox'コントロールに戻そうとしていますか? ** 4)**あなたが良い答えをしたいなら、問題を確実に再現する良い[mcve]を提供する必要があります。 –

答えて

0

何を見つけてください! g.DrawImage(btm, new Rectangle(0,0,6000,4000));

+0

ええ、g.DrawImage(btm、新しい長方形(0,0,6000,4000))を使ってみました。私は同じ結果で終わります。 – SwamJay

0

以下は、画像のアップスケーリング/ダウンスケーリングに役立つ方法です。 大きなアップスケーリング比はどんな場合でも深刻な画像歪みを引き起こすことに注意してください。 また、あなたは、次のusingsが必要になります graphics.CompositingQualityのような、他のgraphics.CompositingModeプロパティで再生しようとする場合があります。

using System.Drawing; 
using System.Drawing.Drawing2D; 
using System.Drawing.Imaging; 

方法は私のアプリでは正常に動作します。

public static Image ImageResize(Image img, int width, int height) 
{ 
    var tgtRect = new Rectangle(0, 0, width, height); 
    var tgtImg = new Bitmap(width, height); 

    tgtImg.SetResolution(img.HorizontalResolution, img.VerticalResolution); 

    using (var graphics = Graphics.FromImage(tgtImg)) 
    { 
     graphics.CompositingMode = CompositingMode.SourceCopy; 
     using (var wrapMode = new ImageAttributes()) 
     { 
      wrapMode.SetWrapMode(WrapMode.TileFlipXY); 
      graphics.DrawImage(img, tgtRect, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, wrapMode); 
     } 
     return tgtImg; 
    } 
} 
関連する問題