1
0
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:
IntelOrca
2015-12-29 15:16:05 +00:00
parent 00e5c4418d
commit cabd0fdc3a
2 changed files with 10 additions and 27 deletions

View File

@@ -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;
}
}

View File

@@ -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 {