我一直试图找到一种方法来写关于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#了。