Files
pcem/experimental/printer_epsonlx810/wx-imagesave.cc
2022-06-23 11:26:13 -07:00

49 lines
1.7 KiB
C++

#include "lpt_epsonlx810.h"
#include <wx/xrc/xmlres.h>
#include <wx/wfstream.h>
#include <wx/log.h>
int wx_image_save_fullpath(const char *fullpath, const char *format, unsigned char *rgba, int width, int height, int alpha) {
int x, y;
wxLogNull logNull;
wxImage image(width, height);
if (alpha) {
// these will be automatically freed
unsigned char *rgb = (unsigned char *)malloc(width * height * 3);
unsigned char *a = (unsigned char *)malloc(width * height);
for (x = 0; x < width; ++x) {
for (y = 0; y < height; ++y) {
rgb[(y * width + x) * 3 + 0] = rgba[(y * width + x) * 4 + 0];
rgb[(y * width + x) * 3 + 1] = rgba[(y * width + x) * 4 + 1];
rgb[(y * width + x) * 3 + 2] = rgba[(y * width + x) * 4 + 2];
a[y * width + x] = rgba[(y * width + x) * 4 + 3];
}
}
image.SetData(rgb);
image.SetAlpha(a);
} else
image.SetData(rgba, true);
wxImageHandler *h;
if (!strcmp(format, IMAGE_TIFF))
h = new wxTIFFHandler();
else if (!strcmp(format, IMAGE_BMP))
h = new wxBMPHandler();
else if (!strcmp(format, IMAGE_JPG))
h = new wxJPEGHandler();
else
h = new wxPNGHandler();
int res = 0;
if (h) {
wxString p(fullpath);
wxFileOutputStream stream(p);
res = h->SaveFile(&image, stream, false);
delete h;
}
return res;
}