如何检查BitmapImage是否为灰度
本文关键字:BitmapImage 是否 灰度 检查 何检查 | 更新日期: 2023-09-27 18:04:35
我从一个StorageFile
得到一个BitmapImage
:
using (var stream = await file.OpenAsync(FileAccessMode.Read)) {
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(stream);
}
我已经能够通过计算其PixelWidth
和PixelHeight
属性来检查图像是否为正方形。如何检查图像颜色是否为灰度?这篇文章说Bitmap
有PixelFormat
属性,不幸的是,Bitmap
在UWP中不再可用。
可以使用BitmapDecoder
获取BitmapPixelFormat
的值。像这样使用
using (var stream = await file.OpenAsync(FileAccessMode.Read)) {
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(stream);
var decoder = await BitmapDecoder.CreateAsync(stream);
BitmapPixelFormat format = decoder.BitmapPixelFormat;
if(format == BitmapPixelFormat.Gray16 || format == BitmapPixelFormat.Gray8 )
// Bitmap is grayscale
}
这取决于你对灰度的定义。
你可能认为灰度是像素格式的问题。在这种情况下,你必须在UWP中找到PixelFormat
的替代品,如果它存在的话(我真的不知道)。
但你也可以有不同的想法。
32位ARGB像素格式的图像可以是灰度的吗?假设您扫描每个像素,它们都在灰度线上,如下所示:
0x000000
0x010101
0x020202
...
0xfefefe
0xffffff
像素格式允许1600万种组合,但实际上只有256种灰度组合被使用。
根据你自己的习惯,你可能会说这仍然是一个灰度图像,因为它可以转换成灰度图像而不会丢失信息。
如果你没看错,你会看到你的问题的答案,不需要PixelFormat
属性存在,但计算起来相当昂贵。