【问题标题】:What is the equivalent of raster.setSample() in Android?Android 中 raster.setSample() 的等价物是什么?
【发布时间】:2015-04-21 18:50:57
【问题描述】:

我正在 Android 中开发一个使用维纳滤镜去模糊图像的应用。一旦我对输入图像(模糊图像)进行了必要的计算,我就需要使用新的 RGBA 值创建一个新的未模糊图像。我已经成功地用 Java 编写了这个代码,但找不到与我在 Android 中创建图像的方式相同的解决方案。我知道您必须在 Android 中使用位图,但由于无法使用 BufferedImage/Raster/WritableRaster,因此无法找到如何设置示例()。我的Java代码如下,

final BufferedImage unblurredImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    final WritableRaster unblurredRaster = unblurredImage.getRaster();
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            unblurredRaster.setSample(x, y, 0, (rgb[x + y * width] >> 16) & 0xFF); // red
            unblurredRaster.setSample(x, y, 1, (rgb[x + y * width] >> 8) & 0xFF); // green
            unblurredRaster.setSample(x, y, 2, rgb[x + y * width] & 0xFF); // blue
            unblurredRaster.setSample(x, y, 3, (rgb[x + y*width] >> 24) & 0xFF); // alpha
        }
    }

    return unblurredImage;

【问题讨论】:

    标签: java android bufferedimage raster bitmapimage


    【解决方案1】:

    有一些选项,都使用Bitmap 类:

    • setPixel(x, y, color) 其中color 是打包的 int ARGB 格式
    • setPixels(pixels, offset, stride, x, y, width, height) 其中pixels 采用压缩的 int ARGB 格式。
    • copyPixelsFromBuffer(buffer)

    最后一个不转换成/从压缩的 int ARGB 格式 (ARGB_8888),所以它可能是最接近 Raster.setSample() 的格式。

    【讨论】:

    • 感谢您的回复。我已经实现了设置像素,但现在当我测试它时,我似乎遇到了内存泄漏。我用谷歌搜索了这个问题,内存泄漏似乎是 Android 上位图的常见问题。你知道处理 Bitmap 内存泄漏的任何事情吗?
    • 我不明白为什么这会导致内存泄漏。如果您遇到内存泄漏,建议您提出一个新问题,并为其添加相关代码和资源。
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    相关资源
    最近更新 更多