2

2 つの問題があります。

まず、ビットマップのアルファを変更して ImageView に保存していますが、ImageView からビットマップを取得するたびに、ImageView での外観とは異なり、RGB 値が変更されます。次に、ビットマップのアルファを取得する方法を考えています。

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 での表示とは異なり、アルファを変更すると 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();
        }
    }

いくつかの調査を行ったところ、アルファの値が 255 より小さい場合にのみ発生することがわかりました。

4

0 に答える 0