【问题标题】:creating a java bitmap image from a 3d byte array which contains 3 channel pixel information从包含 3 通道像素信息的 3d 字节数组创建 java 位图图像
【发布时间】:2020-11-08 02:58:08
【问题描述】:

我有一个像这样的 3 维字节数组:

byte[][][] data = pyf.callAttr("test", red,green,blue).toJava(byte[][][].class);

这里byte[0] 包含具有红色通道像素值的二维数组

byte[0] 是一个 480x360 数组,与 byte[1]byte[2] 相同,分别为绿色和蓝色
现在我想从这个 3 维字节数组中创建一个360x480 java 位图图像

【问题讨论】:

    标签: java android image-processing android-bitmap


    【解决方案1】:

    试试这个作为起点它不会在android上工作,因为android不支持AWT。

    public Image createImage(byte[][][] bytes){
       Image image = new BufferedImage(360,480,BufferedImage.TYPE_INT_RGB);
       Graphics g = image.getGraphics();
       for(int x=0;x<480;x++){
          for(int y=0;y<360;y++){
             //Construct color
             Color color=new Color(bytes[0][x][y],bytes[1][x][y],bytes[2][x][y]);
             g.setColor(color);//Set color
             g.fillRect(x,y,1,1);//Fill pixel
          }
       }
       return image;
    }
    

    你将不得不添加错误检查,也许还有一些事情,比如传递宽度和高度,...

    【讨论】:

    • 是的,这只是你的一个起点,所以你可以将它“翻译”成安卓。
    【解决方案2】:

    我不清楚问题的某些部分,例如您是否要旋转图像(480x360 到 360x480 部分)。

    所以,我假设以下几点:
    (1) 您有一个名为 data 的正确字节数组,它按照您的描述保存数据
    (2) 并且您需要从数据中创建位图
    (3) 如有必要,您可以旋转图像(即以下代码不旋转图像)

    • 以下代码未经测试。但它应该能让你走上正轨。
    int width = 480;
    int height = 360;
    
    int alpha = 1; // change alpha as necessary
    
    Bitmap bmp = Bitmap.createBitmap(width, height, Config.ARGB_8888);
    
    for(int x=0; x<width; x++) {
        for(int y=0; y<height; y++) {
            int red = data[0][x][y];
            int green = data[1][x][y];
            int blue = data[2][x][y];
    
            int color = Color.argb(alpha, red, green, blue);
            
            bmp.setPixel(x, y, color);
        }
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-22
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多