You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm trying to embed lodepng in this project: https://github.com/zenaro147/NeoGB-Printer
It's working great apart that the ESP32 I'm using have a very limited memory, so that I can convert very small images only (typically 160*144 pixels, 2bbp).
I've tried to cut bigger images into small parts to pass them to lodepng encode function and get the IDAT packets to reconstitute a "franken" png. I discovered that it is not allowed by the PNG format where several IDAT chunks must originate from the same unique compressed stream. So the image I got with this method shows only the first IDAT chunks and black pixels elsewhere.
So my question: is there a way to use the lodepng functions to generate a stream of IDAT chunks from a unique stream of pixels (but without storing the whole stream in memory) so that I can pass big images line by line and get each IDAT chunk from a single compressed stream ? I can then make the other chunks without any difficulty to reconstitute my image.
Thanks by advance for your response and amazing library !
Raphael.
The text was updated successfully, but these errors were encountered:
That does look difficult since streaming functionality is not added to the library. Indeed, if you have multiple IDAT chunks in a single PNG, there is a zlib header in the first one only, and other interdependencies between the IDAT chunks. Unfortunately I can't think of any simple hack using the current functionality, not even something like disabling compression, since creating the IDAT chunks yourself would require rewriting quite a lot of the PNG functionality. This currently is most suited for a library that supports streaming.
Thanks for your response. I finally came to thank conclusion too.
I'm now trying to adapt this project for ESP32: https://github.com/bitbank2/PNGenc
It seems to work with some quirks but I know how to correct them.
Hello.
I'm trying to embed lodepng in this project: https://github.com/zenaro147/NeoGB-Printer
It's working great apart that the ESP32 I'm using have a very limited memory, so that I can convert very small images only (typically 160*144 pixels, 2bbp).
I've tried to cut bigger images into small parts to pass them to lodepng encode function and get the IDAT packets to reconstitute a "franken" png. I discovered that it is not allowed by the PNG format where several IDAT chunks must originate from the same unique compressed stream. So the image I got with this method shows only the first IDAT chunks and black pixels elsewhere.
So my question: is there a way to use the lodepng functions to generate a stream of IDAT chunks from a unique stream of pixels (but without storing the whole stream in memory) so that I can pass big images line by line and get each IDAT chunk from a single compressed stream ? I can then make the other chunks without any difficulty to reconstitute my image.
Thanks by advance for your response and amazing library !
Raphael.
The text was updated successfully, but these errors were encountered: