我写了两个代码来获取图像数据。一种来自Java,另一种来自c++。

C++代码:

unsigned char *data1 = stbi_load("C:/Users/skss/Pictures/Untitled.png", &width1, &height1, &nrChannels1, 0);

对于Java:

BufferedImage img=ImageIO.read(new File    ("C:/Users/skss/Pictures/Untitled.png"));
Raster ras=img.getRaster();
double[] data=new double[img.getWidth()*img.getHeight()*3];
ras.getPixels(0,0,img.getWidth(),img.getHeight(),data);

但是,这两个结果并不相同。

这是图像:

数据如何在GL_RGB中排列。即。字节* data = {R,G,B,R,G,B};或其他类型?

最佳答案

它们是2个完全不同的实现。

stbi_load为您提供了一个原始字节数组,每个字节代表一个R G B值。就像您说的那样,数据格式为{R,G,B,R,G,B ...},每三个字节代表一个实际像素。 Java版本为您提供了一个 double 数组,大概是相同的格式,只是数据类型不同。

至于opengl,您需要告诉它像素数据的格式以及您要提供的实际数据类型。在c++版本中,格式为GL_RGB,类型为GL_UNSIGNED_BYTE,在Java版本中,格式仍为GL_RGB,但数据类型为GL_FLOAT(或GL_DOUBLE)

09-30 14:35
查看更多