pygobject / pycairo

Python bindings for cairo
https://pycairo.readthedocs.io
Other
622 stars 85 forks source link

How to use with `numpy` #286

Open page200 opened 1 year ago

page200 commented 1 year ago

Here in tests/test_surface_numpy.py, shape should be (h, w) rather than (w, h). It currenlty works correctly only because w and h are equal.

An older version of this code used to be shape=(h, w, 4), dtype=np.uint8, that seemed clearer for cairo.FORMAT_RGBA32 and cairo.FORMAT_RGB24 images than shape=(h, w), dtype=numpy.uint32

The filename of that script is mentioned somewhere in the documentation as far as I recall, but not linked.

Overall, it would be nice to provide examples how to "unpack" the bits (for example in the case of cairo.FORMAT_RGB30), so that individual users don't have to code that (with np.right_shift etc.) every time like here:
https://community.mypaint.org/t/color-management-and-linear-light/944/17

Usage with numpy seems quite important, but quite hidden.

lazka commented 1 year ago

We have some docs here: https://pycairo.readthedocs.io/en/latest/integration.html

I'm fine with creating a separate sub-page there for specific libraries and providing more examples there.

lazka commented 1 year ago

Here in tests/test_surface_numpy.py, shape should be (h, w) rather than (w, h). It currenlty works correctly only because w and h are equal.

fixed in 809a93cc8

An older version of this code used to be shape=(h, w, 4), dtype=np.uint8, that seemed clearer for cairo.FORMAT_RGBA32 and cairo.FORMAT_RGB24 images than shape=(h, w), dtype=numpy.uint32

Would that work with cairo using native-endian there?

lazka commented 1 year ago

I'm fine with creating a separate sub-page there for specific libraries and providing more examples there.

I started this now in 8e2ef6f171a318