Рисование 16-битного изображения в градациях серого в памяти - PullRequest
7 голосов
/ 21 июля 2011

При необходимости рисовать на 16-битном растровом изображении в градациях серого. Связывание TCanvas с растровым изображением было бы изумительно. Я использую Delphi, но любой язык в порядке. Мне просто нужна идея.

Есть идеи?

Преобразование градаций серого в RGB не вариант, так как при этом теряется половина разрешения (глубина пикселя).

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Вы можете попробовать библиотеку изображений, например ImageFX, или же библиотеку с открытым исходным кодом, попробуйте Graphics32 или VampyreImagingLIbrary , в соответствии с ее Документами здесь он поддерживает некоторые операции, такие как рисование линий и прямоугольников над изображением, загруженным в буфер.Я ожидал бы, что библиотеки сканера (обработки изображений) будут поддерживать изображения в оттенках серого лучше, чем библиотеки без изображений, но я не ожидаю, что библиотеки обработки изображений сканера будут основаны на памяти.

Но если вы хотите выполнить работу непосредственно в видимом буфере (вы упоминаете TCanvas), и вы готовы ограничиться только Delphi XE и только Windows 7, вы можете использовать контекст Direct2D, которыйподдерживает глубину 16 и 32 бита, но поскольку глубина цвета 32 бита все еще будет только 8-битной глубиной по отношению к изображению в градациях серого, я думаю, что все обычные графические библиотеки, не являющиеся оттенками серого, будут терять некоторую информацию о вас.

Если вы не возражаете против использования чего-то устаревшего и немного привязанного к Microsoft Windows, вы можете исследовать, используя стиль DirectDraw (теперь объединенный в DirectX ), для управления буферами (удержание16-битные данные) и позволяет рисовать на нем, а также.Я не знаю о какой-либо специальной поддержке 16-битных изображений в градациях серого.

Интересно, что WPF изначально поддерживает 16-битную шкалу серого.Если бы вы могли узнать, как они это делают, вы могли бы применить технику в Delphi.В этой ссылке также обсуждается использование OpenGL для 16-битной яркости, но нет никаких сомнений в том, что OpenGL позволяет это.Я обнаружил, что люди пытаются использовать OpenGL для медицинских приложений, написанных на изображении Delphi (16-битная шкала серого), но нет ссылок на изменение изображения в памяти.

0 голосов
/ 11 сентября 2014

Вы можете использовать Gdi +, он не будет работать на 16-битной шкале серого, но он работает на 48-битном RGB-изображении.

, поэтому мы можем преобразовать 16-битные данные в 48-битные RGB-данные, скопировав те же 16-битные ввсе три канала. выполняют рисование, а затем снова преобразуют 48 бит в 16 бит

...