Unzipping the Windows download produced a folder named x64. What do I do with its contents?
Version 7.21.07
Merge branch 'master' of https://git.code.sf.net/p/libpgf/git
Version 7.21.07
Version 7.21.07
Version 7.21.07
Version 7.21.07
Version 7.21.07
Version 7.21.07
Thanks, that does seem to resolve the issue.
Corrupted images during ROI decoding
Thanks to Phil!
Bug fix - Version 7.21.06
Corrupted images during ROI decoding
Corrupted images during ROI decoding
Yes, sounds good, I agree that the simple decoder should be the first step. checking a file if it contains a PGF image; each PGF image starts with 'PGF' = 0x50 0x47 0x46 This is already done by this piece of code: https://github.com/DavidMStraub/Pillow-PGF/blob/main/pillow_pgf/init.py#L53-L57 reading and decoding an image file to a memory buffer Right. One problem I faced when playing around was that I didn't really understand how to get the decoder working when fully implemented in C. The documentation...
Hello David Ok, let's try to write a libpgf plugin for pillow. Github is good for me. I think a good starting point is an existing simple image format like PCX, Raw, or TgaRLE. I have seen that in the python part you need to implement 3 functions: checking a file if it contains a PGF image; each PGF image starts with 'PGF' = 0x50 0x47 0x46 reading and decoding an image file to a memory buffer encoding and writing an image file The signature for the decoding function should be: int ImagingPcxDecode(Imaging...
Hi, I don't know C or anything about image codecs, but I am a Python developer, so it looks like a good match ;-) Indeed I would be happy to work on this. I played around a bit with the scaffolding for a Pillow plugin and put what I have cobbled together into a Github repo: https://github.com/DavidMStraub/Pillow-PGF Basically there is a Python method decode in decoder.py that calls the decode function from the C extension in pgf_decoder.c. Do you think you could provide something along these lines?...
Image Viewer 4.5.15.36
Version 7.21.2
Version 7.21.02
Merge branch 'master' of https://git.code.sf.net/p/libpgf/git
Add tile or scanline-based encoding feature for large images.
Hello David Thanks for your proposal. I agree with you that an integration in Pillow would be interesting, but I don't know anybody who is working on this. I've checked the source code of Pillow and have seen that it needs a python and a C part to write a PGF plugin. Since I'm not a Python programmer I could only implement the C part if someone else, maybe you, would implement the python part of the plugin. Let me know if you would like to work on that. Chris -------- Ursprüngliche Nachricht --------Von:...
Version 7.21.2
Merge branch 'master' of https://git.code.sf.net/p/libpgf/git
Version 7.21.2
Version 7.21.2
Merge branch 'master' of https://git.code.sf.net/p/libpgf/git
Version 7.21.2
Merge branch 'master' of https://git.code.sf.net/p/libpgf/git
Version 7.21.2
Merge branch 'master' of https://git.code.sf.net/p/libpgf/git
Version 7.21.2
Version 7.21.2
Because the same filters are applied twice: first horizontally and then vertically. So the maximum possible value is 318* 10/8 = 397
If the max is 318, why did one of my images give 373?
FSE gave 2x faster decoding, vectorization and custom sparse compressors further 3x, totaling 6x. However the emulator of the target I was using was somewhat inaccurate, and the result was still too slow on the real target. 8-bit vars didn't turn out possible. I investigated replacing FSE with various methods, tried nibble-based tANS, etc etc, but couldn't create a generic entropy coder that could beat FSE on the pareto frontier (faster, better or both). Tunstall promised a nice speedup, but nobody...
Yes, the 16 bit library allows at most 14 bits per channel.
The wavelet lowpass filter used is [-1/8, 2/8, 6/8, 2/8, -1/8]. So the maximum value is 255* 10/8 = 318. The wavelet highpass filter used is [-1/2, 1, -1/2]. The resulting value range is [-255 .. 255]. So, the wavelet coefficients need at most 2 additional bits. Some comments in the codec are wrong, since in 16 bit mode at most 14 input bits per channel are allowed and in 32 bit mode at most 30 input bits per channel for lossless compression.
Yes, sounds interesting. I'm interested in your results.
The wavelet lowpass filter used is [-1/8, 2/8, 6/8, 2/8, -1/8]. So the maximum value is 25510/8 = 318. The wavelet highpass filter used is [-1/2, 1, -1/2]. The resulting value range is [-255 .. 255]. So, the wavelet coefficients need at most 2 additional bits. Some comments in the codec are wrong, since in 16 bit mode at most 14 input bits per channel are allowed and in 32 bit mode at most 30 input bits per channel for lossless compression.
Pillow plugin for Python?
Well, some other images had even higher values, 373 in one case. So I guess it's by design then, even if it means a 16-bit configured library would be unable to compress 16-bit images losslessly. For now I'm adding "patches" to the file, a list of error locations and the correct values, since the number of such high values per image is small, some tens in the worst case.
More info on my experiment, in case PGF folks are interested. I'm playing around a slow embedded platform that would benefit from optimized image and video formats. Basing both on PGF for the grayscale component seemed the best option, as it's better than JPEG, but still very fast compared to higher compression formats like jpeg2k, webp, flif, bpg, or especially avif. For my sample images, PGF's quality is quite good. Depending on image, level 4 or 5 is still nearly lossless. The main issue is that...
I'm working on customizing PGF for an embedded use case, and with the attached image (grassfield.png, 1280x960 8-bit grayscale), I hit a curious behavior when encoded at quality 0/lossless. One of the macroblock's m_value[]s is 257 after the wavelet transform, but before the bitplane coding. This is rather curious to me, as to my understanding the wavelet transform should only add a sign bit, not increase the bit depth any further. So for 8-bit grayscale data, the transformed data should be at most...
Thanks for your ticket and hint!
libpgf: Only #define nullptr when using C++ < 11
libpgf: Only #define nullptr when using C++ < 11
Version 7.19.3 is out now!
Build fails with ROI disabled
Fixed in version 7.19.3
Hello Thanks a lot of the bug report. I've fixed it and updated the version. The new version is 7.19.3. Chris
Build fails with ROI disabled
Image Viewer 4.5.15.36
Hi, I want to add PGF import into my app GraphicConverter for MacOS X. The import...