如何获得位图的Alpha?

时间:2015-03-15 05:29:13

标签: android android-bitmap alpha-transparency argb

我有两个问题。

首先,我正在更改位图的alpha并将其保存到ImageView,但每当我从ImageView获取Bitmap时,它与ImageView的外观不同,RGB值都会更改。 其次,我想知道如何获得位图的alpha。

imageview=(ImageView)findViewById(R.id.image);

public Bitmap ColorDodgeBlend(Bitmap source, Bitmap layer,int alpha) {
    Bitmap base = source.copy(Config.ARGB_8888, true);
    Bitmap blend = layer.copy(Config.ARGB_8888, false);

    IntBuffer buffBase = IntBuffer.allocate(base.getWidth() * base.getHeight());
    base.copyPixelsToBuffer(buffBase);
    buffBase.rewind();

    IntBuffer buffBlend = IntBuffer.allocate(blend.getWidth() * blend.getHeight());
    blend.copyPixelsToBuffer(buffBlend);
    buffBlend.rewind();

    IntBuffer buffOut = IntBuffer.allocate(base.getWidth() * base.getHeight());
    buffOut.rewind();

    while (buffOut.position() < buffOut.limit()) {
        int filterInt = buffBlend.get();
        int srcInt = buffBase.get();

        int redValueFilter = Color.red(filterInt);
        int greenValueFilter = Color.green(filterInt);
        int blueValueFilter = Color.blue(filterInt);

        int redValueSrc = Color.red(srcInt);
        int greenValueSrc = Color.green(srcInt);
        int blueValueSrc = Color.blue(srcInt);

        int redValueFinal = colordodge(redValueFilter, redValueSrc);
        int greenValueFinal = colordodge(greenValueFilter, greenValueSrc);
        int blueValueFinal = colordodge(blueValueFilter, blueValueSrc);

        int pixel = Color.argb(alpha, redValueFinal, greenValueFinal, blueValueFinal);

        buffOut.put(pixel);
    }

    buffOut.rewind();

    base.copyPixelsFromBuffer(buffOut);
    blend.recycle();

    return base;
};
bmp=ColorDodgeBlend(Bitmap source, Bitmap layer,alpha);    imageview.setImageBitmap(bmp);

但是当我尝试从ImageView保存位图时,保存的位图的rgb与它在ImageView中的显示方式不同,更改alpha会更改rgb的值。

public Bitmap loadBitmapFromView(View v) {

            Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
                    Bitmap.Config.ARGB_8888);
            Canvas c = new Canvas(b);
    v.draw(c);
return b
}
bitmap b=loadBitmapFromView(imageview);
saveBitmap(b);

private void saveBitmap(Bitmap bmp) {
        try {
            File f = new File(Environment.getExternalStorageDirectory()
                    + "/Pictures/SketchPhoto/");
            f.mkdirs();
            Date d = new Date();
            CharSequence s = DateFormat
                    .format("MM-dd-yy hh-mm-ss", d.getTime());
            fileName = s.toString() + ".jpeg";

            String fullf = f + "/" + fileName;
            FileOutputStream fos = new FileOutputStream(fullf);
            bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.close();
            Toast.makeText(getApplicationContext(), "Sketch Saved", 100).show();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

我做了一些研究,发现只有当alpha值小于255时才会发生。

0 个答案:

没有答案