繁体   English   中英

Windows Phone 8.1与Android的getPixels和createBitmap等效吗?

[英]Windows Phone 8.1 one line equivalent for getPixels & createBitmap from Android?

我正在将某些代码从使用android-jhlabs库的Android应用程序移植到Windows Phone 8.1运行时应用程序。

该代码非常简单,基本上类似于以下内容(在Java中):

PointillizeFilter filter = new PointillizeFilter();
filter.setEdgeColor(Color.BLACK);
filter.setScale(10f);
filter.setRandomness(0.1f);
filter.setAmount(0.1f);
filter.setFuzziness(0.1f);
filter.setTurbulence(10f);
filter.setGridType(PointillizeFilter.SQUARE);
int[] src = AndroidUtils.bitmapToIntArray(artWork);
src = filter.filter(src, width, height);
Bitmap destImage = Bitmap.createBitmap(src, width, height, Config.ARGB_8888);

在Java中:

public static int[] bitmapToIntArray(Bitmap bitmap){
    final int bitmapWidth = bitmap.getWidth();
    final int bitmapHeight = bitmap.getHeight();

    int[] colors = new int[bitmapWidth *  bitmapHeight];
    bitmap.getPixels(colors, 0, bitmapWidth, 0, 0, bitmapWidth, bitmapHeight);

    return colors;
}

我已经将此函数转换为C#,但有一个小问题:

 public static int[] bitmapToIntArray(BitmapImage bitmapImage)
    {
        int bitmapWidth = bitmapImage.PixelWidth;
        int bitmapHeight = bitmapImage.PixelHeight;

        int[] colors = new int[bitmapWidth * bitmapHeight];

         // how to convert line below?
        //bitmap.getPixels(colors, 0, bitmapWidth, 0, 0, bitmapWidth, bitmapHeight);

        return colors;
    }

浏览文档时,我看到了许多不同的位图类:WriteableBitmap,BitmapImage,BitmapEncoder和BitmapDecoder。 我没有找到Windows Phone 8.1的getPixel类,但是有一个Windows Store应用程序类。 即使在那儿,也只能得到一个像素。

createBitmap()命令也是如此。 我找不到任何等效项。

我的问题是,Windows Phone 8.1的getPixels()和createBitmap()命令是否有一行等效项? 最好使用BitmapDecoder吗?

您必须使用BitmapDecoder:

StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read);
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);

var pixelData = await decoder.GetPixelDataAsync();
var pixels = pixelData.DetachPixelData();

var width = decoder.OrientedPixelWidth;
var height = decoder.OrientedPixelHeight;

for (var i = 0; i < height; i++)
{
    for (var j = 0; j < width; j++)
    {
        byte r = pixels[(i * height + j) * 4 + 0]; //red
        byte g = pixels[(i * height + j) * 4 + 1]; //green
        byte b = pixels[(i * height + j) * 4 + 2]; //blue (rgba)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM