当前位置: 首页 > 面试题库 >

从字节数组创建8位图像

丁翰海
2023-03-14
问题内容

通过这种方式获得字节数组-

BufferedImage image = new Robot().createScreenCapture(new Rectangle(screenDimension));
byte[] array = ((DataBufferByte)getGraycaleImage(image).getRaster().getDataBuffer()).getData();
//  Method getGraycaleImage returns a grayscaled BufferedImage, it works fine

现在我如何从字节数组重建此灰度图像?

我对ARGB,RGB或灰度图像了解不多。我试过了-

private Image getGrayscaleImageFromArray(byte[] pixels, int width, int height)
{
    int[] pixels2=getIntArrayFromByteArray(pixels);
    MemoryImageSource mis = new MemoryImageSource(width, height, pixels2, 0, width);
    Toolkit tk = Toolkit.getDefaultToolkit();
    return tk.createImage(mis);
}

private int[] getIntArrayFromByteArray(byte[] pixelsByte)
{
    int[] pixelsInt=new int[pixelsByte.length];
    int i;
    for(i=0;i<pixelsByte.length;i++)
        pixelsInt[i]=pixelsByte[i]<<24 | pixelsByte[i]<<16
| pixelsByte[i]<<8 | pixelsByte[i];  // I think this line creates the problem
    return pixelsInt;
}

当我绘制此图像时,它不是黑白的,而是橙色和灰色的东西。


问题答案:

如果我向您解释如何从ARGB / RGB 2灰度转换,希望对您有所帮助,因为它有太多未知的函数和类:P

ARGB为32位/像素,因此每个通道为8位。Alpha通道是不透明度,因此与透明度相反,因此0是透明的。

RGB是24位/像素。要从ARGB转换为RGB,您必须关闭Alpha通道。

要从RGB转换为灰度,您必须使用以下公式:

0.2989 * R + 0.5870 * G + 0.1140 * B

所以你必须弄清楚哪个字节属于哪个通道;)



 类似资料:
  • 问题内容: 所以-我有一个需要a 作为输入的第三方库。我有一个。 我不想将字节写入磁盘..我想将其保留在内存中。我如何从提供的内容创建一个想法(无需写入磁盘)? 问题答案: 抱歉,不可能。除非您具有RAM磁盘,否则File本质上是磁盘上的实体-但这不是您可以用Java创建的东西。 这正是API不应该基于File对象(或过载以接受InputStream)的原因。

  • 我正在尝试用python、ecrypt数据记录音频原始数据并将其发送到。NET服务器,我在其中解密接收到的数据并转换为字节数组。当我将接收到的数据转换为字节数组时,就像这样的编码。ASCII码。GetBytes(decryptedData)一切都很正常。但最大字节值为63,发送数据的最大字节值为255。发送和接收数据的示例: 发送数据 3, 0, 3, 0, 3, 0, 4, 0, 4, 0, 2

  • 问题内容: 从DB2表中,我有一个Blob,我正在将其转换为字节数组,以便可以使用它。我需要采取字节数组并创建它。 这就是我所拥有的: 但是它创建的是不正确的,它上面有一束黑线。 实际上,通过使用基本上相同的过程编写Web应用程序,我能够创建正确的代码。Web应用程序和有关代码的主要区别在于以下这一行: 所以我知道字节数组是一个并且可以完成,但是我的代码不会创建clean 。 关于如何使它起作用的

  • 我正在编写一个图像处理应用程序,使用javafx作为gui,我想在屏幕上显示处理过的图片。我的程序将图像处理为三维双数组,如double[3][1080][1920],因此我必须减少图像的颜色空间,并将双数组转换为byte或(如果可能)shorts,因为javafx的ImageView不支持浮点值或每个RGB组件的64位。我发现,Imageview只能从文件或inputstream加载数据,因此我

  • Java你必须做new ZipFile(new File("xxx.zip"));才能解压缩一个zip文件。 现在我得到一个字节数组,它的内容是一个zip文件。我从数据库而不是文件中获取这个字节数组。我想解压这个“字节数组文件”,但字节数组或字符串没有ZipFile构造函数(我指的是内容,而不是文件路径)。 有什么解决方案吗?(当然我不想将此字节数组写入实际文件并再次将其读入内存。) 谢谢

  • 问题内容: 我在PostgreSQL中有一个表,其中包含: 是类型,它包含具有正确顺序的该行的父记录列表。 家长:然后再 如何编写一个查询,该查询对于任何给定的ID都会生成其父母姓名的字符串? 例如: :。 :。 :。 编辑: 如果可能的话,我希望请求的ID总是会出现。 :。 :。 :。 :。 问题答案: 您可以结合使用诸如generate_subscripts和array之类的多项操作来获得结果