Я перевожу программу C ++ на Java. Там есть кусок кода, который записывает файл BMP. И я не могу понять fwrite(&outPixels[0], infoHeader.biSizeImage, 1, file);
строку. Как записать весь BMP-файл, если он принимает только 0-й элемент вектора (эта строка не в цикле)?
typedef std::array<uint8, 3> TPixelBGRU8;
std::vector<TPixelBGRU8> outPixels;
outPixels.resize(c_numPixels);
for (size_t i = 0; i < c_numPixels; ++i) {
const TPixelRGBF32& src = g_pixels[i];
TPixelBGRU8& dest = outPixels[i];
dest[0] = uint8(Clamp(correctedPixel[2] * 255.0f, 0.0f, 255.0f));
dest[1] = uint8(Clamp(correctedPixel[1] * 255.0f, 0.0f, 255.0f));
dest[2] = uint8(Clamp(correctedPixel[0] * 255.0f, 0.0f, 255.0f));
}
//
// setting a header info
//
FILE *file;
fopen_s(&file, fileName, "wb");
fwrite(&outPixels[0], infoHeader.biSizeImage, 1, 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((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));
}
}