您好,我有一个灰度jpeg图像,我需要打开它并将其转换为rgb。 我需要最快的方法是可能的,但我一直找不到。 对我来说,可以用灰度值填充rgb值。仅使用setpixel和getpixel会花费一些时间。 我想知道是否有最快的方法可以忽略。
在网络上,有很多将rgb转换为灰度的解决方案,但是很难找到相反的方法。
我已经尝试过使用FormatConvertedBitmap,但是我只是收到错误,我不知道如何 正确使用它。如果这是解决方案,请问有人可以给我写代码从jpeg文件中加载灰度图像,然后创建rgb位图吗?
提前谢谢!
答案 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