如何比较 2 张图像的像素格式?
我试过这个:
if (img1.PixelFormat > img2.PixelFormat)
但“Format8bppIndexed”被评为大于“Format24bppRgb”
我究竟做错了什么?
如何比较 2 张图像的像素格式?
我试过这个:
if (img1.PixelFormat > img2.PixelFormat)
但“Format8bppIndexed”被评为大于“Format24bppRgb”
我究竟做错了什么?
如果您想按位深度比较图像,请尝试以下操作,这对我有用:
/// <summary>
/// Returns the bit depth of <paramref name="image"/>.
/// </summary>
public static int GetBitDepth(this Image image)
{
return ((int) image.PixelFormat >> 8) & 0xFF;
}
比较是有效的,但您只是比较枚举的值,因此结果将取决于定义值的顺序。
如果您需要比较图像的格式,则必须自己建立规则。哪个值“大于”另一个值取决于您的应用程序。
正如@Oded在他的评论中所建议的那样,您可以创建一个Dictionary
带有返回正确相对值(颜色深度)的键控,PixelFormat
以便您的比较返回合理的结果并将其用于您的测试。
这是一个古老的问题,但由于似乎没有人实际上已经发布了明显的答案......Image.GetPixelFormatSize(pixelformat)
返回给定像素格式的每像素使用的位数。所以Format16bppArgb1555
它会返回16
。
Int32 pixSize1 = Image.GetPixelFormatSize(img1.PixelFormat);
Int32 pixSize2 = Image.GetPixelFormatSize(img2.PixelFormat);
if (pixSize1 > pixSize2)
{
...
}
虽然我真的很想知道为什么你会检查它,除非它是为了区分索引格式,转换到较低的 BPP 可能意味着你无法编写更高的调色板索引。