(self, n_bytes: int)
| 34 | self.channel_bits_used = self.header.get_channel_bits_used() |
| 35 | |
| 36 | def _read_bytes(self, n_bytes: int) -> bytes: |
| 37 | bits_per_ch = getattr(self, 'channel_bits_used', None) or self.config.get_max_bits_used_per_channel() |
| 38 | n_bits = n_bytes * 8 |
| 39 | |
| 40 | if bits_per_ch == 1: |
| 41 | flat = self.pixels.reshape(-1) |
| 42 | s, e = self._bit_offset, self._bit_offset + n_bits |
| 43 | bits = (flat[s:e] & 1).astype(np.uint8) |
| 44 | self._bit_offset += n_bits |
| 45 | return np.packbits(bits).tobytes() |
| 46 | else: |
| 47 | result = bytearray() |
| 48 | for _ in range(n_bytes): |
| 49 | byte_val = 0 |
| 50 | for _ in range(8): |
| 51 | byte_val = (byte_val << 1) | self._read_one_bit() |
| 52 | result.append(byte_val) |
| 53 | return bytes(result) |
| 54 | |
| 55 | def _read_one_bit(self) -> int: |
| 56 | bits_per_ch = getattr(self, 'channel_bits_used', None) or self.config.get_max_bits_used_per_channel() |
no test coverage detected