mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-18 12:33:17 +01:00
use image_io_png_write in cmdline_sprite
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
#include <lodepng/lodepng.h>
|
||||
#include "cmdline.h"
|
||||
#include "drawing/drawing.h"
|
||||
#include "image_io.h"
|
||||
#include "platform/platform.h"
|
||||
#include "util/util.h"
|
||||
#include "openrct2.h"
|
||||
@@ -168,33 +169,11 @@ bool sprite_file_export(int spriteIndex, const char *outPath)
|
||||
memcpy(spriteFilePalette, _standardPalette, 256 * 4);
|
||||
gfx_rle_sprite_to_buffer(spriteHeader->offset, pixels, (uint8*)spriteFilePalette, &dpi, IMAGE_TYPE_NO_BACKGROUND, 0, spriteHeader->height, 0, spriteHeader->width);
|
||||
|
||||
LodePNGState pngState;
|
||||
unsigned int pngError;
|
||||
unsigned char* pngData;
|
||||
size_t pngSize;
|
||||
|
||||
lodepng_state_init(&pngState);
|
||||
pngState.info_raw.colortype = LCT_PALETTE;
|
||||
lodepng_palette_add(&pngState.info_raw, 0, 0, 0, 0);
|
||||
for (int i = 1; i < 256; i++) {
|
||||
lodepng_palette_add(
|
||||
&pngState.info_raw,
|
||||
spriteFilePalette[i].r,
|
||||
spriteFilePalette[i].g,
|
||||
spriteFilePalette[i].b,
|
||||
255
|
||||
);
|
||||
}
|
||||
|
||||
pngError = lodepng_encode(&pngData, &pngSize, pixels, spriteHeader->width, spriteHeader->height, &pngState);
|
||||
if (pngError != 0) {
|
||||
free(pngData);
|
||||
fprintf(stderr, "Error creating PNG data, %u: %s", pngError, lodepng_error_text(pngError));
|
||||
return false;
|
||||
} else {
|
||||
lodepng_save_file(pngData, pngSize, outPath);
|
||||
free(pngData);
|
||||
if (image_io_png_write(&dpi, (rct_palette*)spriteFilePalette, outPath)) {
|
||||
return true;
|
||||
} else {
|
||||
fprintf(stderr, "Error writing PNG");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,8 @@ bool image_io_png_write(const rct_drawpixelinfo *dpi, const rct_palette *palette
|
||||
png_ptr, info_ptr, dpi->width, dpi->height, 8,
|
||||
PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT
|
||||
);
|
||||
png_byte transparentIndex = 0;
|
||||
png_set_tRNS(png_ptr, info_ptr, &transparentIndex, 1, NULL);
|
||||
png_write_info(png_ptr, info_ptr);
|
||||
|
||||
// Write pixels
|
||||
@@ -89,7 +91,8 @@ bool image_io_png_write(const rct_drawpixelinfo *dpi, const rct_palette *palette
|
||||
// Get image size
|
||||
int stride = dpi->width + dpi->pitch;
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
lodepng_palette_add(&state.info_raw, 0, 0, 0, 0);
|
||||
for (int i = 1; i < 256; i++) {
|
||||
const rct_palette_entry *entry = &palette->entries[i];
|
||||
uint8 r = entry->red;
|
||||
uint8 g = entry->green;
|
||||
@@ -100,6 +103,7 @@ bool image_io_png_write(const rct_drawpixelinfo *dpi, const rct_palette *palette
|
||||
|
||||
error = lodepng_encode(&png, &pngSize, dpi->bits, stride, dpi->height, &state);
|
||||
if (error != 0) {
|
||||
log_error("Error creating PNG data, %u: %s", error, lodepng_error_text(error));
|
||||
free(png);
|
||||
return false;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user