android bitmap清空,Android Bitmap删除白边

博客内容讲述了如何在Android中处理Bitmap,特别是如何创建一个新的Bitmap,移除原始Bitmap四周的白色边距。作者提供了代码示例,演示了一个方法,通过遍历像素找到非白色像素的位置,从而确定边距并裁剪Bitmap。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个关于Android中位图的问题:我有一个带有白色边距[大小未知]的位图.是否可以创建一个删除了所有白色边距的新位图(矩形)?

Bitmap bmp = Bitmap.createBitmap(width, bmpheigth, Config.ARGB_8888);

Canvas canvas = new Canvas(bmp);

canvas.setBitmap(bmp);

canvas.drawColor(Color.WHITE);

// draw here things!

人们认为不知道绘画的地方.

有什么好办法呢?

谢谢!

解决方法:

谢谢@Maxim Efimov& @StackOverflowException

以防万一有人需要一个代码片段来解决这类问题:

此方法返回一个删除了边距的剪切较小的Bitmap.首先将像素传递给int数组,然后使用数组比Bitmap.getPixel方法快一点

只需调用指示源位图和背景颜色的方法.

Bitmap bmp2 = removeMargins(bmp, Color.WHITE);

private static Bitmap removeMargins2(Bitmap bmp, int color) {

// TODO Auto-generated method stub

long dtMili = System.currentTimeMillis();

int MTop = 0, MBot = 0, MLeft = 0, MRight = 0;

boolean found1 = false, found2 = false;

int[] bmpIn = new int[bmp.getWidth() * bmp.getHeight()];

int[][] bmpInt = new int[bmp.getWidth()][bmp.getHeight()];

bmp.getPixels(bmpIn, 0, bmp.getWidth(), 0, 0, bmp.getWidth(),

bmp.getHeight());

for (int ii = 0, contX = 0, contY = 0; ii < bmpIn.length; ii++) {

bmpInt[contX][contY] = bmpIn[ii];

contX++;

if (contX >= bmp.getWidth()) {

contX = 0;

contY++;

if (contY >= bmp.getHeight()) {

break;

}

}

}

for (int hP = 0; hP < bmpInt[0].length && !found2; hP++) {

// looking for MTop

for (int wP = 0; wP < bmpInt.length && !found2; wP++) {

if (bmpInt[wP][hP] != color) {

Log.e("MTop 2", "Pixel found @" + hP);

MTop = hP;

found2 = true;

break;

}

}

}

found2 = false;

for (int hP = bmpInt[0].length - 1; hP >= 0 && !found2; hP--) {

// looking for MBot

for (int wP = 0; wP < bmpInt.length && !found2; wP++) {

if (bmpInt[wP][hP] != color) {

Log.e("MBot 2", "Pixel found @" + hP);

MBot = bmp.getHeight() - hP;

found2 = true;

break;

}

}

}

found2 = false;

for (int wP = 0; wP < bmpInt.length && !found2; wP++) {

// looking for MLeft

for (int hP = 0; hP < bmpInt[0].length && !found2; hP++) {

if (bmpInt[wP][hP] != color) {

Log.e("MLeft 2", "Pixel found @" + wP);

MLeft = wP;

found2 = true;

break;

}

}

}

found2 = false;

for (int wP = bmpInt.length - 1; wP >= 0 && !found2; wP--) {

// looking for MRight

for (int hP = 0; hP < bmpInt[0].length && !found2; hP++) {

if (bmpInt[wP][hP] != color) {

Log.e("MRight 2", "Pixel found @" + wP);

MRight = bmp.getWidth() - wP;

found2 = true;

break;

}

}

}

found2 = false;

int sizeY = bmp.getHeight() - MBot - MTop, sizeX = bmp.getWidth()

- MRight - MLeft;

Bitmap bmp2 = Bitmap.createBitmap(bmp, MLeft, MTop, sizeX, sizeY);

dtMili = (System.currentTimeMillis() - dtMili);

Log.e("Margin 2",

"Time needed " + dtMili + "mSec\nh:" + bmp.getWidth() + "w:"

+ bmp.getHeight() + "\narray x:" + bmpInt.length + "y:"

+ bmpInt[0].length);

return bmp2;

}

标签:android,bitmap

来源: https://codeday.me/bug/20190725/1532980.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值