在Android中处理ALPHA_8位图并在ImageView中显示

Posted

技术标签:

【中文标题】在Android中处理ALPHA_8位图并在ImageView中显示【英文标题】:Process ALPHA_8 bitmap in Android and show it in ImageView 【发布时间】:2016-11-26 17:35:44 【问题描述】:

我正在实施 sobel 边缘检测算法。处理后我应用新的像素值,255 或 0。我的问题是生成的位图没有显示在 imageView 中。我正在使用 Alpha_8 配置,因为它占用更少的内存并且最适合边缘结果。 如何预览结果?

【问题讨论】:

【参考方案1】:

ALPHA_8 格式被用作掩码,因为它只包含 alpha 而没有颜色信息。您应该将其转换为另一种格式,或者如果您仍然想使用它,那么您应该将它作为背景的掩码。 Check out this response 来自 android 项目成员的类似问题。您也可以查看my response to another question,我在其中放了一个代码示例,说明如何将蒙版应用于另一个位图。

【讨论】:

所以我知道我不能使用 Alpha_8 来保存它的边缘。我必须使用 ARGB_8888? 您可以使用 ARGB_8888 或 ARGB_565,但您始终可以使用 ALPHA_8 作为掩码。您在 ImageView 中看不到它,因为它只包含 alpha 信息,而您的 ImageView 没有任何可应用于它的内容。【参考方案2】:

您可以使用ColorMatrixColorFilter 显示ALPHA_8 位图。 例如,使用下面的矩阵

mColorFilter = new ColorMatrixColorFilter(new float[]
        0, 0, 0, 1, 0,
        0, 0, 0, 0, 0,
        0, 0, 0, 0, 0,
        0, 0, 0, 0, 255
);

使用红色绘制位图。

public void onDraw(Canvas canvas)
    mPaint.setColorFilter(mColorFilter);
    canvas.drawBitmap(mBitmap,x,y,mPaint);

【讨论】:

以上是关于在Android中处理ALPHA_8位图并在ImageView中显示的主要内容,如果未能解决你的问题,请参考以下文章

将位图(RGB_565)转换为灰度(8位)Android

有关Option.inSamplSize 和 Compress 图片压缩

Android开发之大位图压缩水印处理

缩放位图保持纵横比

在 iOS 8 / iPhone 6 上获取像素数据

将 android.media.Image (YUV_420_888) 转换为位图