23#ifndef VCL_IO_IMAGE_BMP_SAVE_H
24#define VCL_IO_IMAGE_BMP_SAVE_H
26#include <vclib/io/file_info.h>
42inline void saveImageToBmp(
43 const std::string& filename,
46 const unsigned char* data)
48 std::string fn = filename;
55 std::ofstream file(fn, std::ios::binary);
57 throw std::runtime_error(
"Failed to open file for writing: " + fn);
61 unsigned char fileHeader[14] = {
79 unsigned char infoHeader[40] = {
94 int fileSize = 54 + w * h * 4;
95 fileHeader[2] = (
unsigned char) (fileSize);
96 fileHeader[3] = (
unsigned char) (fileSize >> 8);
97 fileHeader[4] = (
unsigned char) (fileSize >> 16);
98 fileHeader[5] = (
unsigned char) (fileSize >> 24);
101 infoHeader[4] = (
unsigned char) (w);
102 infoHeader[5] = (
unsigned char) (w >> 8);
103 infoHeader[6] = (
unsigned char) (w >> 16);
104 infoHeader[7] = (
unsigned char) (w >> 24);
105 infoHeader[8] = (
unsigned char) (h);
106 infoHeader[9] = (
unsigned char) (h >> 8);
107 infoHeader[10] = (
unsigned char) (h >> 16);
108 infoHeader[11] = (
unsigned char) (h >> 24);
111 file.write(
reinterpret_cast<const char*
>(fileHeader),
sizeof(fileHeader));
112 file.write(
reinterpret_cast<const char*
>(infoHeader),
sizeof(infoHeader));
115 for (
int y = h - 1; y >= 0; --y) {
116 file.write(
reinterpret_cast<const char*
>(data + y * w * 4), w * 4);
static std::string extension(const std::string &filename)
Get the extension of a file.
Definition file_info.h:260