java - 如何加载原始位图,而不在 Android 上缩放?

标签 java android bitmap

我有一个位图文件,用作 View 的掩码。它在白色背景上有多个不同颜色的矩形区域。当用户触摸 View 时,我使用此事件的 X 和 Y 坐标来查找 mask 的颜色(未显示)并根据返回的颜色代码执行操作。

问题是:使用 BitmapFactory 加载此掩码会导致 Bitmap 对象被缩放。这样颜色会有点失真。如果我有例如一个颜色为 (155, 155, 0) 的实心矩形,然后它会像 (148, 158, 0)、(150, 154, 0) 等等。但我需要得到确切的颜色。

那么如何在没有任何缩放/压缩/类似的东西的情况下加载原始位图呢?

最佳答案

我做了类似的事情,使用存储在 R.raw 中的 png 文件。用户点击了一张图片,触发了图片后面的彩色图片的 onTouch 事件。

public static Bitmap loadBitmapFromView(View v)
{
    Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
    v.draw(c);
    return b;
}

@Override
public boolean onTouch(View v, MotionEvent event)
{
    Bitmap b = loadBitmapFromView(v);
    long color = b.getPixel((int)event.getX(), (int)event.getY());
    //check what the color is, act accordingly 
}

关于java - 如何加载原始位图,而不在 Android 上缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3977009/

相关文章:

java - 基于事件的每个记录器的 Log4j 过滤

java - 已完成项目的百分比

java - Scala IDE (Eclipse) 作为 Scala 应用程序运行

java - 在 iText 5.4.4 中调用 new Chapter(int) 时出现 NullPointerException

android - Base64 元素(来自 xml)太大而不能存储在字符串中?

c# - 从(切孔到)图像中反转裁剪

android - 在多次点击后延迟一个 Intent ?

android - Android 中的声音管理语音识别/TTS

c# - 在循环中创建位图时出现内存溢出异常

android - 如何使用 Canvas 设置仅绘制图像形状