C#使用颜色空间信息将位图保存到jpeg

时间:2018-02-09 16:34:19

标签: c# image colors bitmap jpeg

我一直试图找到一种方法来写关于jpeg色彩空间信息的信息,因为定期保存不会这样做,几乎没有人谈论它。我用来保存到jpeg中的部分代码:

        using (Bitmap bmp = new Bitmap(bitmapPicture))
        {
            ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
            System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
            EncoderParameters myEncoderParameters = new EncoderParameters(1);
            EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L);
            myEncoderParameters.Param[0] = myEncoderParameter;
            bmp.Save(textBox1.Text + "\\" + textBox2.Text + ".jpg", jpgEncoder, myEncoderParameters);
        }

它可以解决问题,但它没有添加色彩空间信息,我认为这是用不同的应用程序打开图片时的问题之一。颜色似乎不正确。由于某种原因,位图画笔仅使用argb颜色空间(下面的注意码)。如果我输入' .FromSrgb'或者' .FromRgb'它错了出来(显然没有这样的东西存在)。这是我如何创建稍后保存的位图的示例:

        using (Graphics gfx = Graphics.FromImage(bitmapPicture))
        using (SolidBrush brush = new SolidBrush(System.Drawing.Color.FromArgb(255, 255, 255)))
        {
            gfx.FillRectangle(brush, 0, 0, with, height);
            gfx.DrawImage(addOtherImageOnSameBitmap, xCoordinate, yCoordinate, with2, height2);
        }

还尝试使用保存文件对话框(下面的代码),但结果是相同的 - jpeg颜色是关闭的,没有关于颜色空间的信息。

        SaveFileDialog save = new SaveFileDialog();
        save.Filter = "Images|*.jpg";
        ImageFormat format = ImageFormat.Png;
        if (save.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string ext = System.IO.Path.GetExtension(save.FileName);
            switch (ext)
            {
                case ".jpg":
                    format = ImageFormat.Jpeg;
                    break;
            }
            pictureBox1.Image.Save(save.FileName, format);
        }

在photoshop中打开该图像并使用sRGB色彩空间保存时,问题得以解决。是否有可能在C#中做到这一点?要在sRGB中保存jpeg并将此信息添加到jpeg文件本身?因为进入photoshop解决这个问题似乎有点太麻烦了(特别是在处理很多图片时)。 附:对不起,如果发布的代码看起来有点偏,我几天前就开始学习C#了。

0 个答案:

没有答案