gpt4 book ai didi

java - java的stb_loadimage()和raster.getPixels()对于同一个文件的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:41:15 24 4
gpt4 key购买 nike

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

但这两个不会产生相同的结果。

这是图片:

sri

数据在 GL_RGB 中是如何排列的。 IE。字节*数据={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)

关于java - java的stb_loadimage()和raster.getPixels()对于同一个文件的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49961915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com