灰度图(IR 图)转成 RGB 图预览,画面出现光斑/黄斑问题解决

一、背景

存在一个 IR 图(红外线 Infrared Radiation),需要在页面上显示出来,IR 图片格式是 gray8,即 8 位的灰度图。

Android 上的 Bitmap 图片格式使用的是 ARGB_8888,所以需要把灰度图转 ARGB 图,每个通道都为 8 位。

二、问题现象

转码思路很简单,就是一个 int 表示一个像素点,刚好是 4 * 8 = 32 位。
那么每一位的值都是等于灰度值,透明度为 0xFF 即可。

    Canvas canvas = mCameraView.getHolder().lockCanvas();
    // draw ir
    int[] pixels = new int[mImageWidth * mImageHeight];
    for (int i = 0; i < pixels.length; i++) {
        int gray = iru8[i];
        pixels[i] = (0XFF000000) | (gray << 16) | (gray << 8) | gray;
    }
    Bitmap bitmap = Bitmap.createBitmap(pixels, mImageWidth, mImageHeight, Bitmap.Config.ARGB_8888);
    canvas.drawBitmap(bitmap, mIRMatrix, null);

然后预览时出现的问题就是下图这样,有很明显的光斑存在:
在这里插入图片描述

三、问题解决

首先,上面的现象肯定不是正常的,仔细看看代码,int gray = iru8[i] 这个步骤其实是有问题的,因为 byte 的范围是 -128 ~ 127 的,如果是负数,赋值为 int 的时候问题就大了(毕竟 java 里面也没有无符号数),之后的移位操作就会出错。

所以我们需要如下改动即可:

    int gray = iru8[i] & 0xFF;

再运行一下,画面就正常了:
在这里插入图片描述

一个小问题,注意注意移位操作中应该多加小心。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将片显示在Excel中,你可以使用以下步骤: 1. 打开Excel,并选择你想要插入片的单元格。 2. 在Excel菜单栏中,选择"插入"选项卡,然后点击"片"按钮。 3. 在弹出的文件选择对话框中,浏览并选择你想要插入的片文件。 4. 点击"插入"按钮,Excel会将选定的片文件插入到选定的单元格中。 如果你希望在Excel中通过URL插入片,那么你可能需要使用Excel的VBA宏编程来实现。下面是一个简单的VBA代码示例,可以将URL转换为片并插入到Excel中: ```vba Sub InsertPictureFromURL() Dim picURL As String Dim picData() As Byte Dim tempFilePath As String Dim tempFileName As String ' 片的URL picURL = "https://ir.ozone.ru/s3/multimedia-7/wc350/6494414143.jpg" ' 创建HTTP请求对象 Set httpReq = CreateObject("MSXML2.XMLHTTP") ' 发送HTTP请求获取片数据 With httpReq .Open "GET", picURL, False .Send picData = .responseBody End With ' 保存片数据到本地临时文件 tempFilePath = Environ("TEMP") & "\" tempFileName = "temp.jpg" Open tempFilePath & tempFileName For Binary Access Write As #1 Put #1, 1, picData Close #1 ' 插入片到Excel With ActiveSheet.Pictures.Insert(tempFilePath & tempFileName) .Left = Range("A1").Left ' 设置片左上角的位置 .Top = Range("A1").Top .ShapeRange.LockAspectRatio = msoFalse ' 可以调整片大小 End With ' 删除临时文件 Kill tempFilePath & tempFileName End Sub ``` 你可以按下Alt+F11打开Excel的VBA编辑器,将上述代码粘贴到"模块"中,然后运行`InsertPictureFromURL`宏,它将会在Excel的当前活动工作表中插入片。请注意,这段代码将会在Excel的A1单元格的左上角插入片。 希望以上信息对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值