当前位置: 首页 > 知识库问答 >
问题:

在android中将图像转换为二进制图像

吕宣
2023-03-14
iv = (ImageView) findViewById (R.id.uploadImage);

//convert the image view into bitmap
iv.buildDrawingCache();
bmap = iv.getDrawingCache();

int red;
int newPixel = 0;
int threshold =230;
int width = bmap.getWidth();
int hieght = bmap.getHeight();
int[] pix = new int[width * hieght];
int[] pix2 = new int[width * hieght];
int alpha = 0;

bmap.getPixels(pix, 0, width, 0, 0, width, hieght);

//convert the image into white and black
for (int i=0;i<width;i++) {  
  for (int j=0;j<hieght;j++) {
    int index = j * width + i;

    red = (pix[index] >> 16) & 0xff;
    alpha = (pix[index] >> 24) & 0xff;

    if (red<threshold) {
      newPixel = 0;
    } else {
      newPixel = 255;
    }
    newPixel = colorToRGB(alpha, newPixel, newPixel, newPixel);
    bmap.setPixel(i, j, newPixel);
    iv.setImageBitmap(bmap);     
  }
} 

//convert the black and white image view into bitmap                                    
bmap.getPixels(pix2, 0, bmap.getWidth(), 0, 0, bmap.getWidth(),bmap.getHeight());

StringBuilder builder = new StringBuilder();
for (int i :pix2) {
  builder.append("   " + i + "    ");
}
Toast.makeText(this, builder, Toast.LENGTH_LONG).show();

private static int colorToRGB (int alpha, int red, int green, int blue) {
  int newPixel = 0;
  newPixel += alpha;
  newPixel = newPixel << 8;
  newPixel += red; newPixel = newPixel << 8;
  newPixel += green; newPixel = newPixel << 8;
  newPixel += blue;
  return newPixel;
}

这是logcat

08-12 08:52:32.887:D/DalvikVM(774):GC_CONCURRENT释放71K,7%释放2765K/2964K,暂停23ms+15ms,总计94ms

08-12 08:52:33.497:D/gralloc_goldfish(774):检测到没有GPU仿真的仿真器。

08-12 08:52:40.698:D/DalvikVM(774):GC_CONCURRENT释放63K,6%释放3087K/3272K,暂停73ms+3ms,总计165ms

08-12 08:52:49.397:我/编舞(774):跳过39帧!应用程序可能在其主线程上做了太多的工作。

08-12 08:52:54.568:D/DalvikVM(774):GC_FOR_ALLOC释放9K,5%释放3124K/3272K,暂停68ms,总计81ms

08-12 08:52:54.617:I/dalvikvm-heap(774):将堆(frag大小写)增长到6.166MB,用于3145744字节分配

08-12 08:52:54.778:D/DalvikVM(774):GC_FOR_ALLOC释放40K,4%释放6155K/6348K,暂停156ms,总计156ms

08-12 08:52:55.008:D/DalvikVM(774):GC_CONCURRENT释放<1k,4%释放6155k/6348k,暂停80ms+38ms,总计231ms

08-12 08:52:55.898:我/编舞(774):跳过412帧!应用程序可能在其主线程上做了太多的工作。

08-12 08:52:57.898:D/DalvikVM(774):GC_FOR_ALLOC释放38K,4%释放6119K/6348K,暂停28ms,总计30ms

08-12 08:52:57.929:I/dalvikvm-heap(774):将堆(frag大小写)增长到9.091MB,用于3145744字节分配

08-12 08:52:58.058:D/DalvikVM(774):GC_CONCURRENT释放<1k,3%释放9191k/9424k,暂停82ms+6ms,总计125ms

08-12 08:52:58.058:D/DalvikVM(774):WAIT_FOR_CONCURRENT_GC阻塞40ms

08-12 08:52:58.089:I/dalvikvm-heap(774):将堆(frag大小写)增长到12.090MB,用于3145744字节分配

08-12 08:52:58.218:D/DalvikVM(774):GC_FOR_ALLOC释放<1K,2%释放12263K/12500K,暂停125ms,总计126ms

08-12 08:52:58.288:D/DalvikVM(774):GC_CONCURRENT释放0K,2%释放12263K/12500K,暂停4ms+16ms,总计70ms

08-12 08:56:37.707:E/trace(886):打开跟踪文件时出错:没有这样的文件或目录(2)08-12 08:56:38.518:D/DalvikVM(886):GC_CONCURRENT释放41K,6%释放2805K/2968K,暂停13ms+3ms,总计77ms

08-12 08:56:38.518:D/DalvikVM(886):WAIT_FOR_CONCURRENT_GC阻塞10ms

08-12 08:56:38.727:D/gralloc_goldfish(886):检测到没有GPU仿真的仿真器。

08-12 08:56:55.107:D/DalvikVM(886):GC_FOR_ALLOC释放23K,5%释放3083K/3236K,暂停69ms,总计78ms

08-12 08:56:55.207:I/dalvikvm-heap(886):将堆(frag大小写)增长到6.126MB,用于3145744字节分配

08-12 08:56:55.367:D/DalvikVM(886):GC_FOR_ALLOC释放1K,3%释放6153K/6312K,暂停156ms,总计156ms

08-12 08:56:55.607:D/DalvikVM(886):GC_CONCURRENT释放4K,3%释放6149K/6312K,暂停80ms+32ms,总计245ms

08-12 08:56:56.747:我/编舞(886):跳过465帧!应用程序可能在其主线程上做了太多的工作。

08-12 08:58:03.287:D/DalvikVM(936):GC_CONCURRENT释放44K,6%释放2805K/2972K,暂停15ms+3ms,总计76ms

08-12 08:58:03.287:D/DalvikVM(936):WAIT_FOR_CONCURRENT_GC阻塞9ms

08-12 08:58:03.637:D/GRALLOC_GOLDFISH(936):检测到没有GPU仿真的仿真器。

共有1个答案

柳韬
2023-03-14

可能是因为您正在转换的位图是零字节:

//convert the image view into bitmap
            iv.buildDrawingCache();
            bmap = iv.getDrawingCache();

试试看:

BitmapDrawable bd = (BitmapDrawable) iv.getDrawable();
            bmap = bd.getBitmap();

希望这有帮助。

 类似资料:
  • 问题内容: 在我的Android应用程序中。我从jpeg图像的代码中获取了二进制代码,如下所示。 该字符串s打印图像的二进制值。我的问题是如何将这种二进制格式转换为jpeg图像? 问题答案: 我不太确定你想要什么 如果要直接从流中创建-instance,则可以使用 它,然后在-instance中显示它: imageView.setImageBitmap(image); 如果要将基数2的字符串表示形

  • 问题内容: 我已经将图像插入数据库,并且我正在从数据库到服务器以及reactjs接收图像,但是在我的反应中,我接收到的图像具有二进制数据。但是我如何将二进制数据转换为图像中的反应。 问题答案: 将二进制数据转换为图像与无关,如果您拥有二进制数据,则将其转换为图像,如下所示:

  • 问题内容: 有什么方法可以将图像转换为javascript中的二进制数据,反之亦然。 问题答案: 我想用JavaScript获取图像数据?回答您的问题: 将标签传递给此功能。它将以base64编码返回图像。但是它将被重新编码。因此,您无法访问原始图像数据。

  • 主要内容:示例使用方法将灰度图像转换为二进制值图像。以下是此方法的语法。 该方法接受以下参数 - mat - 表示输入图像的对象。 dst - 表示输出图像的对象。 thresh - 表示阈值的整数。 maxval - 一个整数,表示与和阈值类型一起使用的最大值。 type - 表示转换类型的整数代码,例如RGB到灰度。 通过将代码与值一起传递给其余参数,可以将灰度图像转换为二值图像。 示例 以下程序演示如何将

  • 问题内容: 使用Java的库如何将32bpp图像(ARGB)转换为16bpp图像(ARGB)?出于好奇,在像素级别上,此转换有什么作用?如果我有一个int值保存一个像素值(具有所有通道),那么在发生转换后,该int会有什么不同? 问题答案: 将32位AARRGGBB值转换为16位ARGB值将是这样的: 它会将所有内容粘贴在低16位中,而将高16位保留为0。 对于每个通道,您会丢失颜色信息的低4位,

  • 问题内容: 我有一个要求用户将其图像上传到哪里,我必须将其转换为某种内容并将其发送到.Net REStful服务。我是angular js的新手。有人可以帮忙吗 问题答案: 我建议您使用 https://github.com/ninjatronic/angular- base64 。 在按照说明使用该库之后,您可以简单地调用: 不要忘记在模块中注入: