【发布时间】:2016-07-14 02:25:27
【问题描述】:
我在我的应用中打开了一张图片,并使用以下代码获取了图片的像素数据。
using (IRandomAccessStream fileStreams = await file.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStreams);
BitmapTransform transform = new BitmapTransform()
{
ScaledWidth = Convert.ToUInt32(bitmapImage.PixelWidth),
ScaledHeight = Convert.ToUInt32(bitmapImage.PixelHeight)
};
PixelDataProvider pixelData = await decoder.GetPixelDataAsync(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Straight,
transform,
ExifOrientationMode.IgnoreExifOrientation,
ColorManagementMode.DoNotColorManage
);
byte[] sourcePixels = pixelData.DetachPixelData();
}
在这里,我得到了图像所有像素的数组。该数组中的像素总数为(width * height * 4)。在分析了这个数组后,我知道索引号 0、1、2 和 3 包含第一个像素的红色、绿色、蓝色和 alpha 值,索引号 4、5、6 和 7 包含红色、绿色、蓝色和 alpha图像的第二个像素的值等等。
现在我想将我的 3x3 滤镜应用到这张图片上,我该如何使用这个一维数组呢?如果我有图像的二维数组,我知道该怎么做。
现在,我心里有一个想法。
- 将红色像素存储在一个二维数组中,绿色像素存储在另一个数组中,以此类推
- 对每个二维数组应用过滤器。
- 将所有这些组合起来再次创建一维数组并返回结果。
这是一个好的解决方案吗? 如果有更好的解决方案,请帮助我。
【问题讨论】:
标签: c# image-processing bitmap win-universal-app