android:如何在不旋转背景的情况下旋转位图前景

时间:2014-02-27 04:30:16

标签: android bitmap

我有一个需要旋转位图的项目,位图处于GRAYSCALE /黑白模式。当我旋转该位图时,它可以工作,但背景(位图的白色部分)也会旋转。无论如何只旋转前景(位图的非白色部分)?或者如果我必须创建一个新功能来解决这个问题吗?

感谢您的帮助..

我编辑相关代码:

int i;
        InputStream inStream = context.getResources().openRawResource(R.raw.register2);
        BufferedInputStream bis = new BufferedInputStream(inStream, 8000);

        DataInputStream dis=new DataInputStream(bis);
        byte[] music=null;
        try {
            music = new byte[inStream.available()];
            i=0;
            while(dis.available()>0)
            {
                music[i]=dis.readByte();
                i++;
            }

            dis.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Bitmap bm = Bitmap.createBitmap(260, 300, Bitmap.Config.ARGB_8888);
        ByteBuffer byteBuff=ByteBuffer.allocate(260*300);
        bm.setHasAlpha(false);
        if(false)
            byteBuff.put(music);
         int[] intbuffer = new int[260*300];
         for (int x=0; x<intbuffer.length; ++x)
            intbuffer[x] = (int) music[x];
        bm.setPixels(intbuffer, 0, 260, 0, 0, 260, 300);
        //img1.setImageBitmap(bm);
        //Canvas canvas=new Canvas(bm);
        Matrix matrix=new Matrix();
        matrix.postRotate(-90);
        Bitmap rotated=Bitmap.createBitmap(bm, 0, 0, 260, 300, matrix, true);
        //matrix.setRotate(4,bm.getWidth()/2,bm.getHeight()/2);
        //canvas.drawBitmap(bm, matrix, new Paint());
        img1.setImageBitmap(rotated);

1 个答案:

答案 0 :(得分:0)

鉴于您的前景和背景像素是颜色差异的 - 您需要在两个不同的位图中提取/分离前景像素和背景像素。您创建的两个新位图应该只有从原始位图中提取的像素,其余部分应该是透明的。

将前景和背景位图分开后,只需旋转前景然后合并即可。