2

如何在不创建任何额外位图的情况下从 andengine 中的 Sprite 获取像素的颜色/alpha?

4

2 回答 2

1

我通过使用此功能解决了这个问题

private void loadObjectsMask()
    {
        InputStream in = null;
        Bitmap maskForObjects=null;
        try {
            final BitmapFactory.Options decodeOptions = new BitmapFactory.Options();
            decodeOptions.inPreferredConfig = Bitmap.Config.ARGB_4444;
            in = GameActivity.this.getAssets().open("images/" + BACKGROUND_PATH + getObjectImgFile());
            maskForObjects = BitmapFactory.decodeStream(in, null, decodeOptions);
        } catch (final IOException e) {

        } finally {
            StreamUtils.close(in);
        }
        if (maskForObjects != null)
        {
            objectsMask=new byte[maskForObjects.getWidth()][maskForObjects.getHeight()];
            for(int pw=0;pw<maskForObjects.getWidth();++pw)
            {
                for(int ph=0;ph<maskForObjects.getHeight();++ph)
                {
                    objectsMask[pw][ph]=(byte)(Color.alpha(maskForObjects.getPixel(pw, ph))==0?0:1);
                }
            }
            maskForObjects.recycle();
            System.out.printf("Bitmap size %d %d\n", maskForObjects.getWidth(),maskForObjects.getHeight());
        }
        else System.out.printf("Bitmap size error\n");
    }
于 2013-01-14T07:20:18.257 回答
-1

看看这个方法,这个方法是用来作用在每个像素上的

 public Bitmap invert(Bitmap src) {
    // image size
    int width = src.getWidth();
    int height = src.getHeight();
    // create output bitmap
    Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
    // color information
    int A, R, G, B;
    int pixel;

    // scan through all pixels
    for(int x = 0; x < width; ++x) {
        for(int y = 0; y < height; ++y) {
            // get pixel color
            pixel = src.getPixel(x, y);
            // get color on each channel
            A = Color.alpha(pixel);
            R = Color.red(pixel);
            G = Color.green(pixel);
            B = Color.blue(pixel);
            // set new pixel color to output image
            bmOut.setPixel(x, y, Color.argb(A, 255-R, 255-G, 255-B));
        }
    }

    // return final image
    return bmOut;
}

转换灰度

public static Bitmap toGrayscale(Bitmap bmpOriginal)
        {        
            int width, height;
            height = bmpOriginal.getHeight();
            width = bmpOriginal.getWidth();    

            Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
            Canvas c = new Canvas(bmpGrayscale);
            Paint paint = new Paint();
            ColorMatrix cm = new ColorMatrix();
            cm.setSaturation(0);
            ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
            paint.setColorFilter(f);
            c.drawBitmap(bmpOriginal, 0, 0, paint);
            return bmpGrayscale;
        }
于 2012-05-04T08:45:51.870 回答