打开 PNG 文件,编辑透明度 (Alpha) 并在 Android 上保存 Java
Open PNG-File, Edit Transparency (Alpha) and Save on Android with Java
我需要编写一个 Android-应用程序,它使用现有的 PNG 文件,更改它的透明度(比如 50%)并覆盖该文件。
我已经尝试将文件作为位图打开,更改那里的 paint-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);
}
}
这只是解决问题的基本思路。
希望这对您有所帮助..谢谢。
我需要编写一个 Android-应用程序,它使用现有的 PNG 文件,更改它的透明度(比如 50%)并覆盖该文件。
我已经尝试将文件作为位图打开,更改那里的 paint-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);
}
}
这只是解决问题的基本思路。 希望这对您有所帮助..谢谢。