Skip to content

Commit 8f7ad03

Browse files
committed
compat.py: Add utility function to get raw bytes from QImages
1 parent 0f7b181 commit 8f7ad03

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

qtpy/compat.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
PYQT6,
1313
PYSIDE2,
1414
PYSIDE6,
15+
QtBindingsNotFoundError,
1516
)
1617
from .QtWidgets import QFileDialog
1718

@@ -200,3 +201,14 @@ def isalive(obj):
200201

201202
return shiboken.isValid(obj)
202203
return None
204+
205+
206+
# =============================================================================
207+
def getimagebytes(qimage):
208+
if PYQT5:
209+
return qimage.bits().asstring(qimage.byteCount())
210+
if PYQT6:
211+
return qimage.bits().asstring(qimage.sizeInBytes())
212+
if PYSIDE2 or PYSIDE6:
213+
return qimage.bits().tobytes()
214+
raise QtBindingsNotFoundError

qtpy/tests/test_compat.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
"""Test the compat module."""
2+
23
import sys
34

45
import pytest
56

67
from qtpy import QtWidgets, compat
8+
9+
from qtpy.QtCore import QRectF, QSize, Qt
10+
from qtpy.QtGui import QBrush, QImage, QPainter
711
from qtpy.tests.utils import not_using_conda
812

913

@@ -22,3 +26,13 @@ def test_isalive(qtbot):
2226
with qtbot.waitSignal(test_widget.destroyed):
2327
test_widget.deleteLater()
2428
assert compat.isalive(test_widget) is False
29+
30+
31+
def test_getimagebytes(qtbot):
32+
"""Test compat.getimagebytes"""
33+
image = QImage(QSize(100, 100), QImage.Format_RGB32)
34+
painter = QPainter(image)
35+
painter.setBrush(QBrush(Qt.black))
36+
painter.fillRect(QRectF(0, 0, 100, 100), Qt.black)
37+
bytes = compat.getimagebytes(image)
38+
assert len(bytes) == 100 * 100 * 4

0 commit comments

Comments
 (0)