2016-07-18 138 views
0

我试图将所有黑色像素转换为一个位图(创建自一个ImageView,它是一个PNG文件).. 我已经在很多但我仍然无法成功。 请帮助我,我想它像3天直... 我的代码的一个小例子:将图像中的所有黑色设置为另一种颜色(ImageView/Bitmap)

headSkin.buildDrawingCache(); 
      final Bitmap bmp = headSkin.getDrawingCache(); 


      int w = bmp.getWidth(); 
      int h = bmp.getHeight(); 

      for (int x = 0; x < w; x++) { 
       for (int y = 0; y < h; y++) { 
        int color = bmp.getPixel(x, y); 

        // Shift your alpha component value to the red component's. 


        bmp.setPixel(x, y, Color.RED); 

       } 
      } 

正如你可以看到... ...我甚至没有说出一个IF语句.. 我只是试图使所有的像素在这个位图红色,甚至没有工作..请帮助?

+0

顺便说一句也许我不需要使用位图?我的意思是我有我的可绘制目录中的PNG,也许我甚至不需要使用ImageView? –

回答

1

我看到2个问题在这里,

首先,你在你的记忆有这个位图对象,并更改黑色像素为红色,但你怎么知道它是否被更改或不呢?你应该一个ImageView的设置到这个位图看到的结果(或将其保存到文件等)

二,使用的getPixels和替代的setPixels,的getPixels会给你的一个维数组,它会像1.row,2。 row,3.row等,setPixels也接受1维数组。此功能是令人难以置信的速度比改变像素1加1

+0

刚刚尝试过,我得到了一个IndexOutOfBound错误 –

0

@Anil

花花公子

嗨,刚刚试了一下,我不能用它“因为IndexOutOfBound例外...

headSkin.buildDrawingCache(); 
      bmp = headSkin.getDrawingCache(); 




      int [] allpixels = new int [bmp.getHeight()*bmp.getWidth()]; 

      bmp.getPixels(allpixels, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight()); 

      for(int i = 0; i < allpixels.length; i++) 
      { 
       if(allpixels[i] == Color.BLACK) 
       { 
        allpixels[i] = Color.RED; 
       } 
      } 
      bmp.setPixels(allpixels, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight()); 


      headSkin.setImageBitmap(bmp); 

这里有什么问题?

编辑:刚才试了一下,现在在运行,没有调试,它甚至不告诉我一个错误或东西..它只是让1-2的单个像素的红色在这整个位图

0
headSkin.buildDrawingCache(); 
     final Bitmap bmp = headSkin.getDrawingCache(); 

我认为你在这些方面有问题。其余的代码看起来很好。 也许位图没有初始化,所以你只有一个位图引用,而不是带有数据的位图对象。

你可以删除位图的一部分从您的代码和初始化位图是这样的:

Bitmap myBitmap = Bitmap.createBitmap(500, 500, Bitmap.Config.RGB8888); 

,然后执行像素操作,如上面一样,只是将所有的像素相同的颜色。

+0

现在它工作(应用程序),因为我改变了一些功能。 无论如何,也许你可以帮我解决我目前遇到的主要问题: 当我画完所有在另一种颜色的黑色像素,图片变得尖锐......就像,它就像一个马里奥游戏或什么的..它变成像素化..我能做什么反对呢? –

+0

你能提供更多的代码吗? – Anil

+0

nvm修复它:P –

相关问题