作者:劈腿年代shui还相信真爱 | 来源:互联网 | 2023-05-28 16:02
我想保存没有透明区域的位图.
位图具有大的透明像素.
所以我想删除它
我怎样才能做到这一点?
我不能添加图片,所以用符号解释.
我不想裁剪功能.我希望使用过滤器
┌────────────────────────┐
│透明区域
│┌─────────
│裁剪此
└────────┘
└────────────────────────┘
1> samgak..:
要查找位图的非透明区域,请迭代x和y中的位图,并找到非透明区域的最小值和最大值.然后将位图裁剪为这些坐标.
Bitmap CropBitmapTransparency(Bitmap sourceBitmap)
{
int minX = sourceBitmap.getWidth();
int minY = sourceBitmap.getHeight();
int maxX = -1;
int maxY = -1;
for(int y = 0; y > 24) & 255;
if(alpha > 0) // pixel is not 100% transparent
{
if(x maxX)
maxX = x;
if(y maxY)
maxY = y;
}
}
}
if((maxX
2> Álvaro Menez..:
使用此github裁剪透明边框.
public static Bitmap crop(Bitmap bitmap) {
int height = bitmap.getHeight();
int width = bitmap.getWidth();
int[] empty = new int[width];
int[] buffer = new int[width];
Arrays.fill(empty, 0);
int top = 0;
int left = 0;
int bottom = height;
int right = width;
for (int y = 0; y top; y--) {
bitmap.getPixels(buffer, 0, width, 0, y, width, 1);
if (!Arrays.equals(empty, buffer)) {
bottom = y;
break;
}
}
empty = new int[height];
buffer = new int[height];
Arrays.fill(empty, 0);
for (int x = 0; x left; x--) {
bitmap.getPixels(buffer, 0, 1, x, 0, 1, height);
if (!Arrays.equals(empty, buffer)) {
right = x;
break;
}
}
return Bitmap.createBitmap(bitmap, left, top, right - left + 1, bottom - top + 1);
}
在这条线................................ bitmap.getPixels(缓冲液,0,1,X,顶+崩溃1,1,bufferSize); /////////////////////// java.lang.IllegalArgumentException:y + height必须<= bitmap.height()
我必须接受这个答案.结果如此之快