Вы можете попробовать библиотеку изображений, например 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-битная шкала серого), но нет ссылок на изменение изображения в памяти.