Dessin sur un bitmap en niveaux de gris 16 bits en mémoire

Dans le besoin de dessiner sur un bitmap en mémoire en niveaux de gris de 16 bits. Associer un TCanvas au bitmap serait merveilleux. J’utilise Delphi mais n’importe quel langage est correct. J’ai juste besoin de l’idée.

Une idée ?

La conversion de l’échelle de gris en RVB n’est pas une option car la moitié de la résolution (profondeur de pixel) est perdue dans le processus.

    Vous pouvez essayer une bibliothèque d’imagerie telle qu’ImageFX, ou pour une source ouverte, essayez Graphics32 ou VampyreImagingLIbrary . Selon ses documents , il supporte certaines opérations comme dessiner des lignes et des rectangles sur une image chargée dans un tampon. Je m’attendrais à ce que les bibliothèques de traitement d’image (traitement d’image) supportent mieux les images en niveaux de gris que les bibliothèques non-imagerie, mais je ne m’attends pas à ce que les bibliothèques de traitement d’image soient en mémoire.

    Mais si vous vouliez faire le travail directement dans un tampon visible (vous mentionnez TCanvas) et que vous souhaitiez vous limiter à Delphi XE et à Windows 7 uniquement, vous pourriez utiliser un contexte Direct2D, qui prend en charge des profondeurs de 16 et 32 ​​bits. mais comme une profondeur de couleur de 32 bits ne sera toujours que de 8 bits par rapport à une image en niveaux de gris, je pense que toutes les bibliothèques graphiques normales sans niveaux de gris vont perdre certaines informations sur vous.

    Si cela ne vous dérangeait pas d’utiliser quelque chose d’un peu vieux et un peu lié à Microsoft Windows, vous pourriez utiliser le style DirectDraw (maintenant fusionné dans DirectX ) pour gérer le Buffer (contenir les données 16 bits) ça aussi. Je ne suis pas au courant qu’il ait un support spécial pour les images en niveaux de gris 16 bits.

    Fait intéressant, WPF supporte nativement les niveaux de gris 16 bits. Si vous pouviez découvrir comment ils le font, vous pourriez saper la technique dans Delphi. Ce lien traite également de l’utilisation d’OpenGL pour faire de la luminance à 16 bits, mais rien ne suggère que OpenGL le permette. J’ai trouvé des personnes essayant d’utiliser OpenGL pour des applications médicales écrites en affichage d’image delphi (16 bits en niveaux de gris), mais aucune référence à la modification de l’image en mémoire.

    Vous pouvez utiliser Gdi +, cela ne fonctionnera pas sur les niveaux de gris 16 bits, mais cela fonctionne sur les images RVB 48 bits.

    de sorte que nous pouvons convertir des données 16 bits en données RVB 48 bits en copiant le même 16 bits dans les trois canaux. Effectue un dessin puis convertit à nouveau 48 bits en 16 bits