diff --git a/3rd/cute_png/src/cute_png.c b/3rd/cute_png/src/cute_png.c index b0a0f629..57716273 100644 --- a/3rd/cute_png/src/cute_png.c +++ b/3rd/cute_png/src/cute_png.c @@ -152,7 +152,7 @@ static bool cute_png_Image__clear(int argc, py_Ref argv) { return true; } -static bool cute_png_Image__to_rgb565(int argc, py_Ref argv) { +static bool cute_png_Image__to_rgb565_bytes(int argc, py_Ref argv) { PY_CHECK_ARGC(1); cp_image_t* image = py_touserdata(argv); unsigned char* data = py_newbytes(py_retval(), image->w * image->h * 2); @@ -171,6 +171,17 @@ static bool cute_png_Image__to_rgb565(int argc, py_Ref argv) { return true; } +static bool cute_png_Image__to_png_bytes(int argc, py_Ref argv) { + PY_CHECK_ARGC(1); + cp_image_t* image = py_touserdata(argv); + cp_saved_png_t saved_image = cp_save_png_to_memory(image); + assert(saved_image.data != NULL); + unsigned char* data = py_newbytes(py_retval(), saved_image.size); + memcpy(data, saved_image.data, saved_image.size); + CUTE_PNG_FREE(saved_image.data); + return true; +} + void pk__add_module_cute_png() { py_GlobalRef mod = py_newmodule("cute_png"); py_Type tp_image = py_newtype("Image", tp_object, mod, cute_png_Image__dtor); @@ -188,5 +199,6 @@ void pk__add_module_cute_png() { py_bindmethod(tp_image, "getpixel", cute_png_Image__getpixel); py_bindmethod(tp_image, "clear", cute_png_Image__clear); - py_bindmethod(tp_image, "to_rgb565", cute_png_Image__to_rgb565); + py_bindmethod(tp_image, "to_rgb565_bytes", cute_png_Image__to_rgb565_bytes); + py_bindmethod(tp_image, "to_png_bytes", cute_png_Image__to_png_bytes); } \ No newline at end of file diff --git a/include/typings/cute_png.pyi b/include/typings/cute_png.pyi index cbbef7e9..8f8b4ce1 100644 --- a/include/typings/cute_png.pyi +++ b/include/typings/cute_png.pyi @@ -16,7 +16,8 @@ class Image: def getpixel(self, x: int, y: int) -> color32: ... def clear(self, color: color32) -> None: ... - def to_rgb565(self) -> bytes: ... + def to_rgb565_bytes(self) -> bytes: ... + def to_png_bytes(self) -> bytes: ... def loads(data: bytes) -> array2d[color32]: ... def dumps(image: array2d[color32]) -> bytes: ...