Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过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 - Fatal编程技术网

通过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));
    }
}