【发布时间】:2019-01-24 09:12:15
【问题描述】:
我正在用 C# 编码,并以这种方式加载图像:
// loading image
string imageFileName = "myImage.jpg";
Bitmap bmp = new Bitmap(imageFileName, false);
// trying to display color so that I know how many channels I have
// except it always displays 4 values, whether I have 1, 3 or 4 channels
Color color = bmp.GetPixel(0, 0);
Console.WriteLine(color.ToString());
// locking the bitmap's bits
System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
// doing stuff that requires me to know the number of channels of the image, amongst other things
// unlocking the bitmap's bits
bmp.UnlockBits(bmpData);
我需要知道图像中的通道数(通常是灰度 (1)、RGB (3) 或 RGBA (4)),但我不知道这些信息是如何存储的。
编辑: 我不想强制像素格式。我正在尝试加载图像,并在程序上找出我加载的图像中的通道数。
【问题讨论】:
-
执行此操作的最简单且通常最快的方法是简单地强制像素格式,以便您的代码无论实际通道数如何都能正常工作。只有一种像素格式是最好的,它是 32bppArgb。这使您可以使用 int* 来寻址像素,这是读取和写入的最快方式。作为对比,您从 JPEG 图像中获得的 24bppRgb 非常尴尬,您必须使用一个字节*,并且每个像素需要 3 次读/写。那很慢。但是,如果需要转换,则不是免费的。你必须测量。
-
我不确定它是否能回答我的问题。我不想强制像素格式。我只是在尝试加载图像,并在程序上找出我加载的图像中的通道数。
-
我知道你问了什么,我的明确建议是不必问。
-
是的,我终于明白你和TaW在说什么了(这就是我删除评论的原因)。 C# 不是我的主要语言,所以我很难弄清楚。