2

写真の保存に問題があります。このコードを使用して、2つの写真を組み合わせます。しかし、私がそれらを保存すると、元の写真の品質よりも品質が悪くなります。

            Image Image1 = Image.FromFile(openFileDialogOpenPicture1.FileName);
            Image Image2 = Image.FromFile(openFileDialogOpenPicture2.FileName);

            int imageHeight = 0;
            if (Image1.Height > Image2.Height)
                imageHeight = Image1.Height;
            else
                imageHeight = Image2.Height;

            Bitmap finalImage = new System.Drawing.Bitmap(Image1.Width + Image2.Width, imageHeight);
            using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(finalImage))
            {
                //set background color
                g.Clear(System.Drawing.Color.Black);

                //go through images and draw it on the final image
                int offset = 0;
                g.DrawImage(pictureBoxBackground1.Image, new System.Drawing.Rectangle(offset, 0, Image1.Width, Image1.Height));
                offset += Image1.Width;
                g.DrawImage(pictureBoxBackground2.Image, new System.Drawing.Rectangle(offset, 0, Image2.Width, Image2.Height));

                var eps = new EncoderParameters(1);
                eps.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
                var ici = GetEncoderInfo("image/jpeg");
                finalImage.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\TestImage.jpg", ici, eps);
            }

また、画像を非圧縮で保存しようとしましたが、ファイルファイルが大きくなるだけで、品質は向上しません。前もって感謝します!

4

1 に答える 1

0

この GetEncoder メソッドを使用しました:

private ImageCodecInfo GetEncoder(ImageFormat format)
{
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

    foreach (ImageCodecInfo codec in codecs)
    {
        if (codec.FormatID == format.Guid)
        {
            return codec;
        }
    }
    return null;
}

GetEncoder(ImageFormat.Jpeg); で呼び出しました。pictureBoxBackground1&2 への参照を削除し (そうしないとビルドされません)、最終結果は私が知る限り高品質です。

于 2012-10-08T13:08:36.403 に答える