通过C&x2B+;矢量文件写入器 我把C++程序翻译成java。有一段代码可以编写BMP文件。我无法理解fwrite(&outPixels[0],infoHeader.biSizeImage,1,file)行。如果只接受向量的第0个元素(此行不在任何循环中),它如何写入整个BMP文件 typedef std::数组TPixelBGRU8; std::向量输出像素; 输出像素。调整大小(c_numPixels); 对于(大小i=0;i
这就是我所做的:通过C&x2B+;矢量文件写入器 我把C++程序翻译成java。有一段代码可以编写BMP文件。我无法理解fwrite(&outPixels[0],infoHeader.biSizeImage,1,file)行。如果只接受向量的第0个元素(此行不在任何循环中),它如何写入整个BMP文件 typedef std::数组TPixelBGRU8; std::向量输出像素; 输出像素。调整大小(c_numPixels); 对于(大小i=0;i,java,c++,file,Java,C++,File,这就是我所做的: // Vector is my own class like array<uint8, 3> List<Vector> outPixel = new ArrayList<>(numPixels); for (int i = 0; i < numPixels; i++) { Vector src = pixels.get(i); Vector dest = outPixel.get(i); dest.setX(
// Vector is my own class like array<uint8, 3>
List<Vector> outPixel = new ArrayList<>(numPixels);
for (int i = 0; i < numPixels; i++) {
Vector src = pixels.get(i);
Vector dest = outPixel.get(i);
dest.setX((int) clamp(correctedPixel.getZ() * 255.0, 0.0, 255.0));
dest.setY((int) clamp(correctedPixel.getY() * 255.0, 0.0, 255.0));
dest.setZ((int) clamp(correctedPixel.getX() * 255.0, 0.0, 255.0));
}
BufferedImage img = new BufferedImage(imageWidth, imageHeight,
BufferedImage.TYPE_INT_BGR);
// I suppose I did it wrong:
for (int i = 0; i < imageWidth; i++) {
for (int j = 0; j < imageHeight; j++) {
img.setRGB(i, j, (int) outPixel.get(i * j));
}
}
//Vector是我自己的类数组
List outPixel=新阵列列表(numPixels);
对于(int i=0;i&outPixels[0]
是说outPixels.data()
更糟糕的方式。它是指向向量
缓冲区内容的指针。&outPixels[0]
是表示outPixels.data()
的更糟糕的方式。它是指向向量
缓冲区内容的指针。它不写入整个BMP文件,只写入BitMapInfo头文件。此输出像素[0]
提供第一个元素,但此输出像素[0]
提供第一个元素的地址,当您通过一次调用fwrite
知道第一个字节的地址和缓冲区的整个大小时,您可以编写整个文件(我指的是BMP图像的内容,而不是它的头,您没有显示执行该操作的代码)。更改为fwrite(outPixels.data(),infoHeader.bisizemage,1,file)
可能会让事情变得更清楚。@rafix07所以我们只需将指针传递给数组。我得到了它。谢谢,我想知道std::vector
中的值是否保证紧密打包?它不写入整个BMP文件,只写入BitMapInfo头文件。这个outPixels[0]
给你第一个元素,但这个&outPixels[0]
给你第一个元素的地址,当您通过一次调用fwrite
知道第一个字节的地址和缓冲区的整个大小时,您可以编写整个文件(我指的是BMP图像的内容,而不是它的头,您没有显示执行该操作的代码)。更改为fwrite(outPixels.data(),infoHeader.bisizemage,1,file)
可能会让事情变得更清楚。@rafix07所以我们只需将指针传递给数组。我得到了它。谢谢,我想知道std::vector
中的值是否有严格包装的保证?
// Vector is my own class like array<uint8, 3>
List<Vector> outPixel = new ArrayList<>(numPixels);
for (int i = 0; i < numPixels; i++) {
Vector src = pixels.get(i);
Vector dest = outPixel.get(i);
dest.setX((int) clamp(correctedPixel.getZ() * 255.0, 0.0, 255.0));
dest.setY((int) clamp(correctedPixel.getY() * 255.0, 0.0, 255.0));
dest.setZ((int) clamp(correctedPixel.getX() * 255.0, 0.0, 255.0));
}
BufferedImage img = new BufferedImage(imageWidth, imageHeight,
BufferedImage.TYPE_INT_BGR);
// I suppose I did it wrong:
for (int i = 0; i < imageWidth; i++) {
for (int j = 0; j < imageHeight; j++) {
img.setRGB(i, j, (int) outPixel.get(i * j));
}
}