打开PNG文件,编辑透明度(Alpha)并使用Java在Android上保存

打开PNG文件,编辑透明度(Alpha)并使用Java在Android上保存,java,android,png,android-bitmap,Java,Android,Png,Android Bitmap,我需要编写一个Android应用程序,使用现有的PNG文件,改变它的透明度,比如说50%,并覆盖该文件 我已经尝试以位图的形式打开文件,在那里更改绘制alpha并再次保存,但它总是会丢失其透明度值 MyBitmap.compress(Bitmap.CompressFormat.PNG, 100, myOutputStream); 我已经读到,将质量值更改为0可能会有所帮助,但这也没有起到作用: MyBitmap.compress(Bitmap.CompressFormat.PNG, 100,

我需要编写一个Android应用程序,使用现有的PNG文件,改变它的透明度,比如说50%,并覆盖该文件

我已经尝试以位图的形式打开文件,在那里更改绘制alpha并再次保存,但它总是会丢失其透明度值

MyBitmap.compress(Bitmap.CompressFormat.PNG, 100, myOutputStream);
我已经读到,将质量值更改为0可能会有所帮助,但这也没有起到作用:

MyBitmap.compress(Bitmap.CompressFormat.PNG, 100, myOutputStream);
我可以证明我的透明度功能是有效的,但当我试图将该图像保存为PNG时,透明度就丢失了。这是我如何使位图透明的:

Paint AlphaPaint = new Paint();
AlphaPaint.setAlpha(Math.round(Opacity * 255));
Canvas canvas = new Canvas(MyImage);
canvas.drawBitmap(..., ..., ..., AlphaPaint);

感谢您的帮助!在这种情况下,性能并不重要,如果使用库是最简单的方法,那当然可以。提前谢谢

试试这种方法,只需迭代所有像素,然后按您想要的百分比减少alpha,并将像素设置回该位图

int A=0, B=0, C=0, D=0, color=0, ncolor=0;

for(int i=0; i<width; i++)
{
    for(int j=0; j<height; j++)
    {
        color = bitmap.getPixel(i,j);
        A = (color >> 24) & 0xff; // Get Alpha
        R = (color >> 16) & 0xff;
        G = (color >>  8) & 0xff;
        B = (color) & 0xff;
        A = A/2; //REDUCE BY HALF SO DIVIDE BY 2(50%)
        ncolor = (A & 0xff) << 24 | (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
        bitmap.setPixel(i,j,ncolor);
    }
}
这只是你如何解决问题的基本想法。
希望这对你有帮助。。谢谢。

谢谢您的回复!但是这对我有什么帮助呢?最后,我还需要使用.compress函数保存位图,在这一部分,alpha值丢失了。位图bitmap=bitmap.createBitmapwidth,height,bitmap.Config.ARGB_8888;并尝试“createBitmapint[]colors,int width,int height,Bitmap.Config Config”从可从现有位图获得的颜色数组创建位图。请尝试使用位图配置ARGB_8888创建位图。您需要使用此配置的位图来保留alpha值。请阅读,本文档包含了几乎所有可用于次要图像处理的方法,并且易于使用,默认情况下android支持它,因为它是内置的。这篇文章也可以参考了解如何使用rgba8888配置来保留alpha,以及如何使用此配置从现有位图对象复制到新位图对象。