|
| 1 | +from dataclasses import dataclass |
| 2 | +from typing import Any, Dict, Tuple |
| 3 | +from openexr_python.exr_enums import EXRCompressionType, EXRLineOrderType |
| 4 | +from openexr_python.exr_channel_info import EXRChannelInfo |
| 5 | +from openexr_python.exr_window import EXRWindow |
| 6 | + |
| 7 | + |
| 8 | +@dataclass |
| 9 | +class EXRHeader: |
| 10 | + _header_raw_dict: Dict[str, Any] |
| 11 | + |
| 12 | + def __getitem__(self, key: str) -> Any: |
| 13 | + return self._header_raw_dict[key] |
| 14 | + |
| 15 | + @property |
| 16 | + def channels(self) -> Dict[str, EXRChannelInfo]: |
| 17 | + raw_channels: Dict[str, Any] = self["channels"] |
| 18 | + return { |
| 19 | + key: EXRChannelInfo.parse_raw2pyobj(raw_channel_info=value) |
| 20 | + for key, value in raw_channels.items() |
| 21 | + } |
| 22 | + |
| 23 | + @property |
| 24 | + def compression(self) -> EXRCompressionType: |
| 25 | + raw_compression: Any = self["compression"] |
| 26 | + return EXRCompressionType.parse_raw2pyobj(raw_compression=raw_compression) |
| 27 | + |
| 28 | + @property |
| 29 | + def data_window(self) -> EXRWindow: |
| 30 | + raw_dataWindow: Any = self["dataWindow"] |
| 31 | + return EXRWindow.parse_raw_to_window(raw_dataWindow) |
| 32 | + |
| 33 | + @property |
| 34 | + def display_window(self) -> EXRWindow: |
| 35 | + raw_dataWindow: Any = self["displayWindow"] |
| 36 | + return EXRWindow.parse_raw_to_window(raw_dataWindow) |
| 37 | + |
| 38 | + @property |
| 39 | + def lineOrder(self) -> EXRLineOrderType: |
| 40 | + raw_line_order: Any = self["lineOrder"] |
| 41 | + return EXRLineOrderType.parse_raw2pyobj(raw_line_order=raw_line_order) |
| 42 | + |
| 43 | + @property |
| 44 | + def pixelAspectRatio(self) -> float: |
| 45 | + raw_pixel_aspect_ratio: float = self["pixelAspectRatio"] |
| 46 | + return raw_pixel_aspect_ratio |
| 47 | + |
| 48 | + @property |
| 49 | + def screenWindowCenter(self) -> Tuple[float, float]: |
| 50 | + raw_screen_window_center: Any = self["screenWindowCenter"] |
| 51 | + return (raw_screen_window_center.x, raw_screen_window_center.y) |
| 52 | + |
| 53 | + @property |
| 54 | + def screenWindowWidth(self) -> float: |
| 55 | + raw_screen_window_width: float = self["screenWindowWidth"] |
| 56 | + return raw_screen_window_width |
0 commit comments