请问,为什么我把像素的透明度从255改到0后却没效果。
我的过程是,先给bitmap对象装载图片,然后getPiexls(),然后改透明度,然后setPixels(),最后drawImage();
为什么却没有效果。
或者谁能告诉我ColorFilter怎么用也好,谢谢了。

解决方案 »

  1.   

    看你bitmap对象是怎么创建的了,Bitmap.Config设置为ARGB的话,那bitmap是支持透明的。setpixel就能生效了
      

  2.   

    m_Background = ((BitmapDrawable) getResources().getDrawable(R.drawable.background)).getBitmap();
    就这样创建的,难道这样不行吗。
      

  3.   

    代码是这样的,麻烦谁帮忙看一下吖,谢谢了
    public class ImageView extends View {

    // Canvas canvas = new Canvas();
    int[] m_BmpPixel;
    Canvas m_Canvas;
    Paint m_Paint;
    Bitmap m_Background;
    Bitmap m_item1, m_item2, m_item3, m_item4, m_item5, m_item6, m_item7;

    public ImageView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub

    m_BmpPixel = new int[6700];
    // load bitmap
    //m_Background = ((BitmapDrawable) getResources().getDrawable(R.drawable.background)).getBitmap();
    m_Background = BitmapFactory.decodeResource(getResources(),
                    R.drawable.background);
    m_Background.setDensity(107);

    m_item1 = BitmapFactory.decodeResource(getResources(),
                    R.drawable.item1);
    m_Paint  = new Paint();
    m_Canvas = new Canvas(m_Background);
    drawImage(m_item1, 0, 0);
    }

    public void onDraw(Canvas canvas){
    // draw bitmap
    canvas.drawBitmap(m_Background, 0, 0, null);

    // drawImage(m_item1, 0, 0);
    } public void transparentImage(Bitmap bmp){

    ColorFilter cft;

    int i,m_ImageWidth, m_ImageHeigth, j;

    m_ImageWidth = bmp.getWidth();
    m_ImageHeigth = bmp.getHeight();

    bmp.getPixels(m_BmpPixel, 0, m_ImageWidth, 0, 0, m_ImageWidth, m_ImageHeigth); for(i = 0; i<6700; i++){ if((m_BmpPixel[i] & 0x00ffffff) ==  0x00ffffff){
    m_BmpPixel[i] = 0x00ffffff;
    } }
    bmp.setPixels(m_BmpPixel, 0, m_ImageWidth, 0, 0, m_ImageWidth, m_ImageHeigth);

    }

        public void drawImage(Bitmap bmp, float x, float y) {
            
     //       if(bmp == null) return;
            
            /* 记录好图片坐标 */
     //       map = new HashMap();
     //      map.put("x", x);
     //       map.put("y", y);
     //       map.put("bmp", bmp);
     //       list.add(map);
     //       Log.d("MyView", "drawImage--->" + initx + ":" + inity);
            m_Canvas.drawBitmap(bmp, x, y, m_Paint);
            invalidate();
        }
      

  4.   

    这个是修改透明度的函数,但是为什么修改成功了,到上面createImage的时候就不行了呢
    public void transparentImage(Bitmap bmp){ColorFilter cft;int i,m_ImageWidth, m_ImageHeigth, j;m_ImageWidth = bmp.getWidth();
    m_ImageHeigth = bmp.getHeight();bmp.getPixels(m_BmpPixel, 0, m_ImageWidth, 0, 0, m_ImageWidth, m_ImageHeigth);for(i = 0; i<6700; i++){if((m_BmpPixel[i] & 0x00ffffff) == 0x00ffffff){
    m_BmpPixel[i] = 0x00ffffff;
    }}
    bmp.setPixels(m_BmpPixel, 0, m_ImageWidth, 0, 0, m_ImageWidth, m_ImageHeigth);}
      

  5.   

    alpha通道只参与运算,不参与显示。一定要有东西和你做alpha运算才能看到效果。如果你的bitmap压根就不支持alpha运算,肯定没有效果了。