Я разрабатываю приложение для Android (в Delphi), которое загружает изображение чистого красного цвета (#FF0000) в цветовом пространстве sRGB. Затем изображение декодируется в растровое изображение с параметром inPreferredColorSpace, для которого установлено значение Display P3.
Вот что я делаю:
Загружаю Изображение sRGB с #FF0000:
Код: Выделить всё
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredColorSpace = ColorSpace.get(ColorSpace.Named.DISPLAY_P3);
Bitmap bitmap = BitmapFactory.decodeFile(fileName, options);
Convert the bitmap into an OpenGL texture and draw it on a SurfaceTexture.
Проблема: при загрузке изображения я ожидаю, что красный цвет sRGB
#FF0000 будет преобразован в его эквивалент Display P3,
#EA3323. >. Вместо этого при рендеринге изображения я получаю цвет
#d84532 (
#d84532 — это преобразование цвета sRGB
#EA3323 в Дисплей P3). Похоже, что красный цвет (#
FF0000) сначала был преобразован в #
EA3323 на дисплее P3, а затем снова неправильно преобразован в #
d84532
Почему происходит эта двойная конверсия? Связано ли это с тем, как OpenGL или SurfaceTexture обрабатывает цветовые пространства, и если да, то как его настроить, чтобы избежать двойного преобразования?
Любые советы или объяснения будут очень полезны!
Подробнее здесь:
https://stackoverflow.com/questions/790 ... p3-and-the