从ByteArray获取像素颜色

时间:2014-06-15 17:29:52

标签: c# bytearray transparency pixel

我有一张尺寸为160x175像素的图片。我使用以下代码将其加载到一个字节数组中:

var file = await StorageFile.GetFileFromApplicationUriAsync(
    new Uri("ms-appx:///Assets/Image.png"));

using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
    var decoder = await BitmapDecoder.CreateAsync(stream);

    var myTransform = new BitmapTransform
    {
        ScaledHeight = (uint)pixelHeight,
        ScaledWidth = (uint)pixelWidth
    };

    var pixels = await decoder.GetPixelDataAsync(
        BitmapPixelFormat.Rgba8,
        BitmapAlphaMode.Straight,
        myTransform,
        ExifOrientationMode.IgnoreExifOrientation,
        ColorManagementMode.DoNotColorManage);

    var bytes = pixels.DetachPixelData();
}

现在我想检查每个像素的透明度与否。我的字节数组长度为112000.我认为160px * 175px * 4(RGBA)。那么,如果字节数组中的每个第4个字节都是像素的透明度字节,那么它的内容是255是透明度吗?

如何在字节数组中对像素进行排序?水平还是垂直?

我无法在MSDN中找到有关带像素的字节数组的内容。

1 个答案:

答案 0 :(得分:3)

通常位图数据被写为扫描线,即。一次一个水平像素行。然后每行跟随下一行,在图像数据中垂直向上或向下移动。

每条扫描线都保持宽度像素,但为了有效访问,每条扫描线的末端通常都有填充,以使数据进入处理器友好的内存对齐。但是,32位数据通常不需要这个填充,因此下一个扫描行将紧跟在下一个字节中。

因此,对于您描述的条件,每4个字节最有可能是alpha。 alpha值为0表示完全透明。