我写了两个代码来获取图像数据。一种来自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)