mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-06 06:32:56 +01:00
Removed image_io_bmp_write()
This commit is contained in:
125
src/image_io.c
125
src/image_io.c
@@ -187,128 +187,3 @@ static void my_png_flush(png_structp png_ptr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Bitmap header structs, for cross platform purposes
|
||||
typedef struct BitmapFileHeader {
|
||||
uint16 bfType;
|
||||
uint32 bfSize;
|
||||
uint16 bfReserved1;
|
||||
uint16 bfReserved2;
|
||||
uint32 bfOffBits;
|
||||
} BitmapFileHeader;
|
||||
|
||||
typedef struct BitmapInfoHeader {
|
||||
uint32 biSize;
|
||||
sint32 biWidth;
|
||||
sint32 biHeight;
|
||||
uint16 biPlanes;
|
||||
uint16 biBitCount;
|
||||
uint32 biCompression;
|
||||
uint32 biSizeImage;
|
||||
sint32 biXPelsPerMeter;
|
||||
sint32 biYPelsPerMeter;
|
||||
uint32 biClrUsed;
|
||||
uint32 biClrImportant;
|
||||
} BitmapInfoHeader;
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x00683D20
|
||||
*/
|
||||
bool image_io_bmp_write(const rct_drawpixelinfo *dpi, const rct_palette *palette, const utf8 *path)
|
||||
{
|
||||
BitmapFileHeader header;
|
||||
BitmapInfoHeader info;
|
||||
|
||||
int i, y, width, height, stride;
|
||||
uint8 *buffer, *row;
|
||||
SDL_RWops *fp;
|
||||
unsigned int bytesWritten;
|
||||
|
||||
// Open binary file for writing
|
||||
if ((fp = SDL_RWFromFile(path, "wb")) == NULL){
|
||||
return false;
|
||||
}
|
||||
|
||||
// Allocate buffer
|
||||
buffer = malloc(0xFFFF);
|
||||
if (buffer == NULL) {
|
||||
SDL_RWclose(fp);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get image size
|
||||
width = dpi->width;
|
||||
height = dpi->height;
|
||||
stride = dpi->width + dpi->pitch;
|
||||
|
||||
// File header
|
||||
memset(&header, 0, sizeof(header));
|
||||
header.bfType = 0x4D42;
|
||||
header.bfSize = height * stride + 1038;
|
||||
header.bfOffBits = 1038;
|
||||
|
||||
bytesWritten = SDL_RWwrite(fp, &header, sizeof(BitmapFileHeader), 1);
|
||||
if (bytesWritten != 1) {
|
||||
SDL_RWclose(fp);
|
||||
SafeFree(buffer);
|
||||
log_error("failed to save screenshot");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Info header
|
||||
memset(&info, 0, sizeof(info));
|
||||
info.biSize = sizeof(info);
|
||||
info.biWidth = width;
|
||||
info.biHeight = height;
|
||||
info.biPlanes = 1;
|
||||
info.biBitCount = 8;
|
||||
info.biXPelsPerMeter = 2520;
|
||||
info.biYPelsPerMeter = 2520;
|
||||
info.biClrUsed = 246;
|
||||
|
||||
bytesWritten = SDL_RWwrite(fp, &info, sizeof(BitmapInfoHeader), 1);
|
||||
if (bytesWritten != 1) {
|
||||
SDL_RWclose(fp);
|
||||
SafeFree(buffer);
|
||||
log_error("failed to save screenshot");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Palette
|
||||
memset(buffer, 0, 246 * 4);
|
||||
for (i = 0; i < 246; i++) {
|
||||
const rct_palette_entry *entry = &palette->entries[i];
|
||||
buffer[i * 4 + 0] = entry->blue;
|
||||
buffer[i * 4 + 1] = entry->green;
|
||||
buffer[i * 4 + 2] = entry->red;
|
||||
}
|
||||
|
||||
bytesWritten = SDL_RWwrite(fp, buffer, sizeof(char), 246 * 4);
|
||||
if (bytesWritten != 246*4){
|
||||
SDL_RWclose(fp);
|
||||
SafeFree(buffer);
|
||||
log_error("failed to save screenshot");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Image, save upside down
|
||||
for (y = dpi->height - 1; y >= 0; y--) {
|
||||
row = dpi->bits + y * (dpi->width + dpi->pitch);
|
||||
|
||||
memset(buffer, 0, stride);
|
||||
memcpy(buffer, row, dpi->width);
|
||||
|
||||
bytesWritten = SDL_RWwrite(fp, buffer, sizeof(char), stride);
|
||||
if (bytesWritten != stride){
|
||||
SDL_RWclose(fp);
|
||||
SafeFree(buffer);
|
||||
log_error("failed to save screenshot");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_RWclose(fp);
|
||||
free(buffer);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,5 @@
|
||||
bool image_io_png_read(uint8 **pixels, uint32 *width, uint32 *height, const utf8 *path);
|
||||
|
||||
bool image_io_png_write(const rct_drawpixelinfo *dpi, const rct_palette *palette, const utf8 *path);
|
||||
bool image_io_bmp_write(const rct_drawpixelinfo *dpi, const rct_palette *palette, const utf8 *path);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user