首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:有效地确保缩放位图中的像素只有两种颜色

Android:有效地确保缩放位图中的像素只有两种颜色
EN

Stack Overflow用户
提问于 2011-08-09 00:39:58
回答 2查看 294关注 0票数 0

我有一个位图,它的像素只包含两个argb值:纯黑色和纯透明。然后我在Android中放大位图,现在位图有很多argb值:纯黑色、纯透明和具有不同透明度级别的黑色(即半透明黑色);这是由于android自动完成的插值。我希望位图像素只包含原始的两个argb值。

目前,我通过以下过程完成此任务:

代码语言:javascript
运行
复制
  my_bitmap = Bitmap.createScaledBitmap(BitmapFactory
                    .decodeResource(context.getResources(),
                            R.drawable.my_resource), 
                                  new_width, new height, false);

for (int i = 0; i < my_bitmap.getWidth(); i++) {
                for (int j = 0; j < my_bitmap.getWidth(); j++) {
                    if (my_bitmap.getPixel(i, j) != Color.TRANSPARENT) {
                        my_bitmap.setPixel(i, j, Color.BLACK);
                    }
                }
        }

这在便宜的手机上是非常慢的,即使是一个小的位图,有谁知道如何A)做得更快,或者B)放大位图而不出现新的argb值?

EN

回答 2

Stack Overflow用户

发布于 2011-08-09 00:51:45

我认为这里的答案是一个算法。

位图操作非常昂贵...也许您可以将位图缓存在某个地方,并仅在明确请求插值时才绘制它?

我的另一个想法是将一些像素分组在一起,并有一个标志"hasChanged“或类似的标志,当某些东西发生变化时将其设置为true,这样系统就知道它必须重新绘制像素组。这样你就不会在必要的时候更频繁地重画东西。

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2011-08-09 02:31:30

在代码中进行缩放,因为内置算法不是您想要的。你将避免你不想要的插值,并且你不需要撤销它。(请原谅任何编码错误--这是我在没有访问IDE或编译器的情况下编写的。)

代码语言:javascript
运行
复制
my_bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_resource);
int[] src = new int[my_bitmap.getWidth() * my_bitmap.getHeight()];
my_bitmap.getPixels(src, 0, my_bitmap.getWidth(), 0, 0, my_bitmap.getWidth(), my_bitmap.getHeight());
int[] dst = new int[new_width * new_height];
float scaleX = my_bitmap.getWidth() / new_width;
float scaleY = my_bitmap.getHeight() / new_height;
for (int y = 0; y < new_height; y++) {
    for (int x = 0; x < new_width; x++) {
        int srcY = (int) (y * scaleY);
        int srcX = (int) (x * scaleX);
        dst[y*new_height + x] = src[srcY*my_bitmap.getHeight() + srcX];
    }
}
Bitmap newBitmap = Bitmap.createBitmap(dst, 0, new_width, new_width, new_height, Bitmap.Config.ARGB_8888);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6985428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档