0

如何比较 2 张图像的像素格式?

我试过这个:

if (img1.PixelFormat > img2.PixelFormat)

但“Format8bppIndexed”被评为大于“Format24bppRgb”

我究竟做错了什么?

4

3 回答 3

1

如果您想按位深度比较图像,请尝试以下操作,这对我有用:

/// <summary>
/// Returns the bit depth of <paramref name="image"/>.
/// </summary>
public static int GetBitDepth(this Image image)
{
    return ((int) image.PixelFormat >> 8) & 0xFF;
}
于 2012-01-17T13:14:56.367 回答
1

比较是有效的,但您只是比较枚举的,因此结果将取决于定义值的顺序。

如果您需要比较图像的格式,则必须自己建立规则。哪个值“大于”另一个值取决于您的应用程序。

正如@Oded在他的评论中所建议的那样,您可以创建一个Dictionary带有返回正确相对值(颜色深度)的键控,PixelFormat以便您的比较返回合理的结果并将其用于您的测试。

于 2011-11-20T21:51:23.927 回答
0

这是一个古老的问题,但由于似乎没有人实际上已经发布了明显的答案......Image.GetPixelFormatSize(pixelformat)返回给定像素格式的每像素使用的位数。所以Format16bppArgb1555它会返回16

Int32 pixSize1 = Image.GetPixelFormatSize(img1.PixelFormat);
Int32 pixSize2 = Image.GetPixelFormatSize(img2.PixelFormat);
if (pixSize1 > pixSize2)
{
    ...
}

虽然我真的很想知道为什么你会检查它,除非它是为了区分索引格式,转换到较低的 BPP 可能意味着你无法编写更高的调色板索引。

于 2018-03-21T14:28:35.143 回答