Do not use a protocol for PixelAccess object

This commit is contained in:
Nulano 2024-06-19 21:48:48 +02:00
parent 32264a1ccd
commit b64847e07f
3 changed files with 25 additions and 31 deletions

View File

@ -44,7 +44,23 @@ Access using negative indexes is also possible. ::
----------------------------- -----------------------------
.. class:: PixelAccess .. class:: PixelAccess
:canonical: PIL.Image.PixelAccess :canonical: PIL.Image.core.PixelAccess
.. automethod:: PIL.Image.PixelAccess.__getitem__ .. method:: __getitem__(self, xy: tuple[int, int]) -> float | tuple[int, ...]
.. automethod:: PIL.Image.PixelAccess.__setitem__
Returns the pixel at x,y. The pixel is returned as a single
value for single band images or a tuple for multi-band images.
:param xy: The pixel coordinate, given as (x, y).
:returns: a pixel value for single band images, a tuple of
pixel values for multiband images.
.. method:: __setitem__(self, xy: tuple[int, int], color: float | tuple[int, ...]) -> None
Modifies the pixel at x,y. The color is given as a single
numerical value for single band images, and a tuple for
multi-band images.
:param xy: The pixel coordinate, given as (x, y).
:param color: The pixel value according to its mode,
e.g. tuple (r, g, b) for RGB mode.

View File

@ -227,7 +227,7 @@ if hasattr(core, "DEFAULT_STRATEGY"):
# Registries # Registries
if TYPE_CHECKING: if TYPE_CHECKING:
from . import ImageFile from . import ImageFile, PyAccess
ID: list[str] = [] ID: list[str] = []
OPEN: dict[ OPEN: dict[
str, str,
@ -512,31 +512,6 @@ def _getscaleoffset(expr):
# Implementation wrapper # Implementation wrapper
class PixelAccess(Protocol):
def __getitem__(self, xy: tuple[int, int]) -> float | tuple[int, ...]:
"""
Returns the pixel at x,y. The pixel is returned as a single
value for single band images or a tuple for multi-band images.
:param xy: The pixel coordinate, given as (x, y).
:returns: a pixel value for single band images, a tuple of
pixel values for multiband images.
"""
raise NotImplementedError()
def __setitem__(self, xy: tuple[int, int], color: float | tuple[int, ...]) -> None:
"""
Modifies the pixel at x,y. The color is given as a single
numerical value for single band images, and a tuple for
multi-band images.
:param xy: The pixel coordinate, given as (x, y).
:param color: The pixel value according to its mode,
e.g. tuple (r, g, b) for RGB mode.
"""
raise NotImplementedError()
class SupportsGetData(Protocol): class SupportsGetData(Protocol):
def getdata( def getdata(
self, self,
@ -897,7 +872,7 @@ class Image:
msg = "cannot decode image data" msg = "cannot decode image data"
raise ValueError(msg) raise ValueError(msg)
def load(self) -> PixelAccess | None: def load(self) -> core.PixelAccess | PyAccess.PyAccess | None:
""" """
Allocates storage for the image and loads the pixel data. In Allocates storage for the image and loads the pixel data. In
normal cases, you don't need to call this method, since the normal cases, you don't need to call this method, since the

View File

@ -10,7 +10,10 @@ class ImagingDraw:
def __getattr__(self, name: str) -> Any: ... def __getattr__(self, name: str) -> Any: ...
class PixelAccess: class PixelAccess:
def __getattr__(self, name: str) -> Any: ... def __getitem__(self, xy: tuple[int, int]) -> float | tuple[int, ...]: ...
def __setitem__(
self, xy: tuple[int, int], color: float | tuple[int, ...]
) -> None: ...
def font(image, glyphdata: bytes) -> ImagingFont: ... def font(image, glyphdata: bytes) -> ImagingFont: ...
def __getattr__(name: str) -> Any: ... def __getattr__(name: str) -> Any: ...