【问题标题】:Get pixel color from ByteArray从 ByteArray 获取像素颜色
【发布时间】:2014-08-05 14:28:28
【问题描述】:

我有一个大小为 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 中找不到任何关于带像素的字节数组的外观。

【问题讨论】:

  • A=255 是不透明的,A=0 是透明的。
  • 谢谢。这有帮助:)

标签: c# bytearray transparency pixel


【解决方案1】:

通常位图数据被写入扫描线,即一次一个水平的像素行。每一行之后是下一行,以便在图像数据中垂直向上或向下移动。

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

因此,对于您描述的情况,很可能每 4 个字节都是 alpha。 alpha 值为 0 表示完全透明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多