|
1 | 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 |
| 2 | +from typing import Any, Dict |
| 3 | +import OpenEXR |
| 4 | +import Imath |
6 | 5 |
|
7 | 6 |
|
8 | 7 | @dataclass |
9 | 8 | class EXRHeader: |
10 | | - _header_raw_dict: Dict[str, Any] |
| 9 | + raw_header: Dict[str, Any] |
11 | 10 |
|
12 | 11 | def __getitem__(self, key: str) -> Any: |
13 | | - return self._header_raw_dict[key] |
| 12 | + return self.raw_header[key] |
| 13 | + |
| 14 | + def add_channel(self, channel_name: str, channel_info: Imath.Channel): |
| 15 | + self.channels[channel_name] = channel_info |
| 16 | + |
| 17 | + def remove_channel(self, channel_name: str): |
| 18 | + self.channels.pop(channel_name) |
14 | 19 |
|
15 | 20 | @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 | | - } |
| 21 | + def channels(self) -> Dict[str, Imath.Channel]: |
| 22 | + raw_channels: Dict[str, Imath.Channel] = self["channels"] |
| 23 | + return raw_channels |
22 | 24 |
|
23 | 25 | @property |
24 | | - def compression(self) -> EXRCompressionType: |
25 | | - raw_compression: Any = self["compression"] |
26 | | - return EXRCompressionType.parse_raw2pyobj(raw_compression=raw_compression) |
| 26 | + def compression(self) -> Imath.Compression: |
| 27 | + raw_compression: Imath.Compression = self["compression"] |
| 28 | + return raw_compression |
27 | 29 |
|
28 | 30 | @property |
29 | | - def data_window(self) -> EXRWindow: |
30 | | - raw_dataWindow: Any = self["dataWindow"] |
31 | | - return EXRWindow.parse_raw_to_window(raw_dataWindow) |
| 31 | + def data_window(self) -> Imath.Box2i: |
| 32 | + raw_dataWindow: Imath.Box2i = self["dataWindow"] |
| 33 | + return raw_dataWindow |
32 | 34 |
|
33 | 35 | @property |
34 | | - def display_window(self) -> EXRWindow: |
35 | | - raw_dataWindow: Any = self["displayWindow"] |
36 | | - return EXRWindow.parse_raw_to_window(raw_dataWindow) |
| 36 | + def display_window(self) -> Imath.Box2i: |
| 37 | + raw_dataWindow: Imath.Box2i = self["displayWindow"] |
| 38 | + return raw_dataWindow |
37 | 39 |
|
38 | 40 | @property |
39 | | - def line_order(self) -> EXRLineOrderType: |
40 | | - raw_line_order: Any = self["lineOrder"] |
41 | | - return EXRLineOrderType.parse_raw2pyobj(raw_line_order=raw_line_order) |
| 41 | + def line_order(self) -> Imath.LineOrder: |
| 42 | + raw_line_order: Imath.LineOrder = self["lineOrder"] |
| 43 | + return raw_line_order |
42 | 44 |
|
43 | 45 | @property |
44 | 46 | def pixel_aspect_ratio(self) -> float: |
45 | 47 | raw_pixel_aspect_ratio: float = self["pixelAspectRatio"] |
46 | 48 | return raw_pixel_aspect_ratio |
47 | 49 |
|
48 | 50 | @property |
49 | | - def screen_window_center(self) -> Tuple[float, float]: |
50 | | - raw_screen_window_center: Any = self["screenWindowCenter"] |
51 | | - return (raw_screen_window_center.x, raw_screen_window_center.y) |
| 51 | + def screen_window_center(self) -> Imath.V2f: |
| 52 | + raw_screen_window_center: Imath.V2f = self["screenWindowCenter"] |
| 53 | + return raw_screen_window_center |
52 | 54 |
|
53 | 55 | @property |
54 | 56 | def screen_window_width(self) -> float: |
55 | 57 | raw_screen_window_width: float = self["screenWindowWidth"] |
56 | 58 | return raw_screen_window_width |
| 59 | + |
| 60 | + @classmethod |
| 61 | + def create_header(cls, width: int, height: int): |
| 62 | + raw_header = OpenEXR.Header(width, height) |
| 63 | + return EXRHeader(raw_header=raw_header) |
0 commit comments