2012-04-18 7 views
5

pngイメージを1つのpngにマージするプログラムを作成したいと思います。 すべての画像の高さは78px、幅は120pxですので、ビットマップ1200x78を作成しました(画像を10個マージする必要があります)。 マージしますが、結果のpngの画像はすべて約2倍になります。どうして? 「:Pピンクの犬」の画像を.NETでグラフィックスに描画するときに画像を拡大する

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Security; 
using System.Drawing.Imaging; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     OpenFileDialog openFileDialog1; 
     Bitmap bitmap; 

     public Form1() 
     { 
      InitializeComponent(); 
      openFileDialog1 = new OpenFileDialog(); 
      openFileDialog1.Multiselect = true; 
      openFileDialog1.Filter = 
     "Images (*.PNG;*.JPG;*.GIF)|*.PNG;*.JPG;*.GIF|" + 
     "All files (*.*)|*.*"; 
      openFileDialog1.Title = "Select images to merge"; 

      bitmap = new Bitmap(1200, 78); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      DialogResult dr = this.openFileDialog1.ShowDialog(); 

      if (dr == System.Windows.Forms.DialogResult.OK) 
      { 
       // Read the files 
       int shift = 0; 
       foreach (String file in openFileDialog1.FileNames) 
       { 
        // Create a PictureBox. 
        try 
        { 
         PictureBox pb = new PictureBox(); 
         Image loadedImage = Image.FromFile(file); 
         pb.Height = loadedImage.Height; 
         pb.Width = loadedImage.Width; 
         pb.Image = loadedImage; 
         flowLayoutPanel2.Controls.Add(pb); 

         paintToBitmap(loadedImage, shift); 

         shift += loadedImage.Width; 
        } 
        catch (SecurityException ex) 
        { 
         // The user lacks appropriate permissions to read files, discover paths, etc. 
         MessageBox.Show("Security error\n\n" + 
          "Error message: " + ex.Message + "\n\n" + 
          "Details (send to Support):\n\n" + ex.StackTrace 
         ); 
        } 
        catch (Exception ex) 
        { 
         // Could not load the image - probably related to Windows file system permissions. 
         MessageBox.Show("!!!"); 
        } 
       } 


       saveImage(); 
      } 
     } 

     private void paintToBitmap(Image image, int shift) 
     {   
      Graphics graphics = Graphics.FromImage(bitmap); 
      graphics.DrawImage(image, new Point(shift, 0)); 
     } 

     private void saveImage() 
     { 
      bitmap.Save("d:\\result.png", System.Drawing.Imaging.ImageFormat.Png); 
     } 

     private void flowLayoutPanel2_Paint(object sender, PaintEventArgs e) 
     { 

     } 
    } 
} 
+0

にあなたのコードを更新してください、私はあなたのコードを実行し、正常に動作するようです。あなたの入力画像の1つを添付できますか?私はこれがdpiやそれに類似したイメージに関する問題だと思います。 – Till

+0

http://files.moonmana.com/forums/m1.png http://files.moonmana.com/forums/m2.png –

答えて

3

この

graphics.DrawImage(image, new Rectangle(shift, 0,120,78)); 
+0

ありがとう、四角い助けが、3番目のパラメータは幅ですのでシフトなしでちょうど120でなければなりません。 graphics.DrawImage(イメージ、新しい矩形(シフト、0,120,78)); –

+0

これを編集しますので、これを回答としてマークしてください – Likurg

1

それはあなたのサイズに画像を適応しようとしているようです:

は、ここに私のコードです。背景でイメージを塗りつぶすと、別の方法で結果が得られます。これを参照してください。

http://i.stack.imgur.com/3eVEu.png http://i.stack.imgur.com/DaygF.png http://i.stack.imgur.com/xwEve.png

ので、問題はあなたの写真の目に見えない背景にあると思われます。

+2

1つの色で塗りつぶされた四角形を使用している場合、あなたの例がどのように動作するのか? :) 0,0の矩形を描画しています。120から240にリサイズします。次の矩形を120に描画するよりも、最初のサイズ変更された矩形の一部と重なり合うようになります; –

+0

編集されたコメント:) –

+0

私の編集の回答を参照 – MarcoM

関連する問題