我可以改进位图处理吗?

时间:2015-08-18 01:15:04

标签: android image-processing bitmap

我正在下载位图。将其复制到可变位图中,并将所有Magenta像素替换为透明像素。特别是复制部分对我来说似乎浪费了资源。我怎样才能改善这个?

    Bitmap mIcon11 = null;

    try {
        InputStream in = new java.net.URL(urldisplay).openStream();
        mIcon11 = BitmapFactory.decodeStream(in);
    } catch (Exception e) {
        Log.d(TAG, e.getMessage());
        e.printStackTrace();
    }


    Bitmap copy = mIcon11.copy(Bitmap.Config.ARGB_8888, true);
    mIcon11.recycle();
    int [] allpixels = new int [ copy.getHeight()*copy.getWidth()];
    copy.getPixels(allpixels, 0, copy.getWidth(), 0, 0, copy.getWidth(), copy.getHeight());
    for(int i =0; i < copy.getHeight() * copy.getWidth(); i++)
    {
        if( allpixels[i] == Color.MAGENTA)
        {
            allpixels[i] = Color.TRANSPARENT;
        }
    }
    copy.setPixels(allpixels, 0, copy.getWidth(), 0, 0, copy.getWidth(), copy.getHeight());

1 个答案:

答案 0 :(得分:0)

尝试类似的事情:

Bitmap finalBitmap = Bitmap.createBitmap(mIcon11.getWidth(), mIcon11.getHeight, Bitmap.Config.ARGB_8888);

for(int x = 0; x < mIcon11.getWidth(); x++){
    for(int y = 0; y < mIcon11.getHeight(); y++){
        if(mIcon11.getPixel(x, y) != Color.MAGENTA){
            finalBitmap.setPixel(x, y, mIcon11.getPixel(x, y)); 
        }else{
            finalBitmap.setPixel(x, y, Color.TRANSPARENT);
        }
    }
}

我刚刚做到这一点,我应该工作。如果这不起作用,请尝试使用十六进制值而不是颜色(例如:Color.MAGENTA; 0xff00ff)如果您的洋红色与Color.MAGENTA或您想要的任何颜色不同,则可以使用。大多数图像编辑程序显示您的颜色的十六进制值。