5

png画像を1つのpngにマージするプログラムを作りたいです。すべての画像は高さ78px、幅120pxなので、ビットマップ1200x78を作成しました(10枚の画像をマージする必要があります)マージしますが、結果のpngのすべての画像は約x2に拡大縮小されます。なんで?

これが私のコードです:

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)
        {

        }
    }
}
4

2 に答える 2

3

これにコードを更新してみてください

graphics.DrawImage(image, new Rectangle(shift, 0,120,78));
于 2012-04-18T07:54:31.313 に答える
1

「ピンクの犬:P」の画像のサイズに合わせて画像を調整しようとしているようです。画像を背景で塗りつぶすと、結果が異なります。これを参照してください:

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

したがって、問題はあなたの写真の目に見えない背景にあるようです。

于 2012-04-18T07:54:10.733 に答える