Adding image_display widget
This commit is contained in:
@@ -11,6 +11,8 @@ from PIL import Image as PILImage
|
||||
from src.utils.logger import get_logger
|
||||
from src.utils.file_utils import validate_file_path, is_image_file
|
||||
|
||||
from PySide6.QtGui import QImage
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
@@ -58,6 +60,7 @@ class Image:
|
||||
self._channels: int = 0
|
||||
self._format: str = ""
|
||||
self._size_bytes: int = 0
|
||||
self._dtype: Optional[np.dtype] = None
|
||||
|
||||
# Load the image
|
||||
self._load()
|
||||
@@ -93,6 +96,7 @@ class Image:
|
||||
self._channels = self._data.shape[2] if len(self._data.shape) == 3 else 1
|
||||
self._format = self.path.suffix.lower().lstrip(".")
|
||||
self._size_bytes = self.path.stat().st_size
|
||||
self._dtype = self._data.dtype
|
||||
|
||||
# Load PIL version for compatibility (convert BGR to RGB)
|
||||
if self._channels == 3:
|
||||
@@ -157,6 +161,7 @@ class Image:
|
||||
Returns:
|
||||
Tuple of (height, width, channels)
|
||||
"""
|
||||
print("shape", self._height, self._width, self._channels)
|
||||
return (self._height, self._width, self._channels)
|
||||
|
||||
@property
|
||||
@@ -179,6 +184,33 @@ class Image:
|
||||
"""Get file size in megabytes."""
|
||||
return self._size_bytes / (1024 * 1024)
|
||||
|
||||
@property
|
||||
def dtype(self) -> np.dtype:
|
||||
"""Get the data type of the image array."""
|
||||
if self._dtype is None:
|
||||
raise ImageLoadError("Image dtype not available")
|
||||
return self._dtype
|
||||
|
||||
@property
|
||||
def qtimage_format(self) -> QImage.Format:
|
||||
"""
|
||||
Get the appropriate QImage format for the image.
|
||||
|
||||
Returns:
|
||||
QImage.Format enum value
|
||||
"""
|
||||
if self._channels == 3:
|
||||
return QImage.Format_RGB888
|
||||
elif self._channels == 4:
|
||||
return QImage.Format_RGBA8888
|
||||
elif self._channels == 1:
|
||||
if self._dtype == np.uint16:
|
||||
return QImage.Format_Grayscale16
|
||||
else:
|
||||
return QImage.Format_Grayscale8
|
||||
else:
|
||||
raise ImageLoadError(f"Unsupported number of channels: {self._channels}")
|
||||
|
||||
def get_rgb(self) -> np.ndarray:
|
||||
"""
|
||||
Get image data as RGB numpy array.
|
||||
|
||||
Reference in New Issue
Block a user