欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发实现去除bitmap无用白色边框的方法示例

程序员文章站 2023-08-12 13:30:19
本文实例讲述了android开发实现去除bitmap无用白色边框的方法。分享给大家供大家参考,具体如下: 图示 如下图所示,之前介绍过android bitmap的用法...

本文实例讲述了android开发实现去除bitmap无用白色边框的方法。分享给大家供大家参考,具体如下:

图示

如下图所示,之前介绍过android bitmap的用法,这里提供的工具类作用是,去除内容区域以外的白色边框。

Android开发实现去除bitmap无用白色边框的方法示例

代码

import android.graphics.bitmap;
/**
 * created by victor yang on 2016/6/17.
 * 去除 bitmap 无用的白色边框
 */
public class bitmapdeletenousespaceutil {
  /**
   * 灰度化 bitmap
   * @param imgthewidth
   * @param imgtheheight
   * @param imgthepixels
   * @return
   */
  private static bitmap getgrayimg(int imgthewidth, int imgtheheight, int[] imgthepixels) {
    int alpha = 0xff << 24; //设置透明度
    for (int i = 0; i < imgtheheight; i++) {
      for (int j = 0; j < imgthewidth; j++) {
        int grey = imgthepixels[imgthewidth * i + j];
        int red = ((grey & 0x00ff0000) >> 16); //获取红色灰度值
        int green = ((grey & 0x0000ff00) >> 8); //获取绿色灰度值
        int blue = (grey & 0x000000ff);     //获取蓝色灰度值
        grey = (int) ((float) red * 0.3 + (float) green * 0.59 + (float) blue * 0.11);
        grey = alpha | (grey << 16) | (grey << 8) | grey; //添加透明度
        imgthepixels[imgthewidth * i + j] = grey;  //更改像素色值
      }
    }
    bitmap result =
        bitmap.createbitmap(imgthewidth, imgtheheight, bitmap.config.rgb_565);
    result.setpixels(imgthepixels, 0, imgthewidth, 0, 0, imgthewidth, imgtheheight);
    return result;
  }
  /**
   * 去除多余白框
   * @param originbitmap
   * @return
   */
  public static bitmap deletenousewhitespace(bitmap originbitmap) {
    int[] imgthepixels = new int[originbitmap.getwidth() * originbitmap.getheight()];
    originbitmap.getpixels(
        imgthepixels,
        0,
        originbitmap.getwidth(),
        0,
        0,
        originbitmap.getwidth(),
        originbitmap.getheight());
    // 灰度化 bitmap
    bitmap bitmap = getgrayimg(
        originbitmap.getwidth(),
        originbitmap.getheight(),
        imgthepixels);
    int top = 0; // 上边框白色高度
    int left = 0; // 左边框白色高度
    int right = 0; // 右边框白色高度
    int bottom = 0; // 底边框白色高度
    for (int h = 0; h < bitmap.getheight(); h++) {
      boolean holdblackpix = false;
      for (int w = 0; w < bitmap.getwidth(); w++) {
        if (bitmap.getpixel(w, h) != -1) { // -1 是白色
          holdblackpix = true; // 如果不是-1 则是其他颜色
          break;
        }
      }
      if (holdblackpix) {
        break;
      }
      top++;
    }
    for (int w = 0; w < bitmap.getwidth(); w++) {
      boolean holdblackpix = false;
      for (int h = 0; h < bitmap.getheight(); h++) {
        if (bitmap.getpixel(w, h) != -1) {
          holdblackpix = true;
          break;
        }
      }
      if (holdblackpix) {
        break;
      }
      left++;
    }
    for (int w = bitmap.getwidth() - 1; w >= 0; w--) {
      boolean holdblackpix = false;
      for (int h = 0; h < bitmap.getheight(); h++) {
        if (bitmap.getpixel(w, h) != -1) {
          holdblackpix = true;
          break;
        }
      }
      if (holdblackpix) {
        break;
      }
      right++;
    }
    for (int h = bitmap.getheight() - 1; h >= 0; h--) {
      boolean holdblackpix = false;
      for (int w = 0; w < bitmap.getwidth(); w++) {
        if (bitmap.getpixel(w, h) != -1) {
          holdblackpix = true;
          break;
        }
      }
      if (holdblackpix) {
        break;
      }
      bottom++;
    }
    // 获取内容区域的宽高
    int cropheight = bitmap.getheight() - bottom - top;
    int cropwidth = bitmap.getwidth() - left - right;
    // 获取内容区域的像素点
    int[] newpix = new int[cropwidth * cropheight];
    int i = 0;
    for (int h = top; h < top + cropheight; h++) {
      for (int w = left; w < left + cropwidth; w++) {
        newpix[i++] = bitmap.getpixel(w, h);
      }
    }
    // 创建切割后的 bitmap, 针对彩色图,把 newpix 替换为 originbitmap 的 pixs
    return bitmap.createbitmap(newpix, cropwidth, cropheight, bitmap.config.argb_8888);
  }
}

更多关于android相关内容感兴趣的读者可查看本站专题:《android图形与图像处理技巧总结》、《android拍照与图片处理技巧总结》、《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。