使用C#将灰度图像转换为RGB图像

时间:2018-08-06 08:32:56

标签: c# .net image rgb grayscale

您好,我有一个灰度jpeg图像,我需要打开它并将其转换为rgb。 我需要最快的方法是可能的,但我一直找不到。 对我来说,可以用灰度值填充rgb值。仅使用setpixel和getpixel会花费一些时间。 我想知道是否有最快的方法可以忽略。

在网络上,有很多将rgb转换为灰度的解决方案,但是很难找到相反的方法。

我已经尝试过使用FormatConvertedBitmap,但是我只是收到错误,我不知道如何 正确使用它。如果这是解决方案,请问有人可以给我写代码从jpeg文件中加载灰度图像,然后创建rgb位图吗?

提前谢谢!

3 个答案:

答案 0 :(得分:1)

此问题中有一些未明确指定的内容,因此在这里我要作一些假设。

我要做出的第一个假设是输入的灰度图像没有3字节的RGB值来确定像素的颜色,相反,我假设对于灰度图像中的每个像素,只有1个字节指定它代表的灰度色调。

这,其中0代表黑色,255代表白色。

因为每个像素的RGB值的红色为1个字节,绿色为1个字节,蓝色为1个字节(总共3个字节),所以无法将上述灰度图像转换为RGB图片,因为没有足够的数据。

但是,您可以做的是使用每个像素的灰度图像色调,并为所有三个RGB值设置该值。您仍然会得到一张灰度图像,但是像素格式(RGB)不同。

编辑:在研究了如何解决这个问题后,我写了一些代码,它需要一个文件C:\ image \ image1.bmp:

   //load input image (bitmap)
    Bitmap image1 = new Bitmap(@"C:\image\image1.bmp");

    //create output image (bitmap) and set the new pixel format
    Bitmap image2 = new Bitmap(image1.Width, image1.Height,
        System.Drawing.Imaging.PixelFormat.Format24bppRgb);

    //draw the input image on the output image within a specified rectangle (area)
    using (Graphics gr = Graphics.FromImage(image2)) {
        gr.DrawImage(image1, new Rectangle(0, 0, image2.Width, image2.Height));
    }

    //save output image
    image2.Save(@"C:\image\image2.bmp");

答案 1 :(得分:0)

无论如何,我的最终解决方案是添加压缩质量设置 就像帖子中解释的那样: High quality JPEG compression with c# 我将其张贴在下面,也许有人会发现它有用:

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;

Bitmap orig = new Bitmap(@imageor); // imageor is the complete path of the original image

Bitmap clone = new Bitmap(orig.Width, orig.Height,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
using (Graphics gr = Graphics.FromImage(clone))
{
     gr.DrawImage(orig, new Rectangle(0, 0, clone.Width, clone.Height));
}
clone.Save(clonergb, jpgEncoder, myEncoderParameters); // clonergb is the complete path of the cloned jpeg RGB image

答案 2 :(得分:-2)

在链接上提出的解决方案: stackoverflow.com/a/2016509/4871566 – DeveloperExceptionError 工作得很好。 感谢发布它的那个人!!!!!! 这是我的解决方案:

Bitmap orig = new Bitmap(@imagenamecm);
                //imagenamecm is the link to the 8bit-greyscale image
                Bitmap clone = new Bitmap(orig.Width, orig.Height,
                    System.Drawing.Imaging.PixelFormat.Format32bppPArgb);

                using (Graphics gr = Graphics.FromImage(clone))
                {
                    gr.DrawImage(orig, new Rectangle(0, 0, clone.Width, clone.Height));
                }
                    clone.Save(imagenamecmrgb, System.Drawing.Imaging.ImageFormat.Jpeg);
                //  imagenamecmrgb is the path for the greyscale rgb image