2011-07-21 30 views
7

Necesita dibujar en un mapa de bits en memoria en escala de grises de 16 bits. Asociar un TCanvas al mapa de bits sería maravilloso. Yo uso Delphi, pero cualquier idioma está bien. Solo necesito la idea.Dibujando en un mapa de bits en escala de grises de 16 bits en la memoria

¿Alguna idea?

La conversión de la escala de grises en RGB no es una opción porque la mitad de la resolución (profundidad del píxel) se pierde en el proceso.

+1

supongo que la cuestión de fondo es : ¿Admite GDI imágenes de escala de grises de 16 bits? Canvas es solo una envoltura sobre GDI. – CodesInChaos

+0

GDI no admite 16 bits por píxel AFIK –

+0

¿Qué dibujo? Una polyfiller que se puede usar para dibujar muchas cosas con colores sólidos es solo unas pocas líneas de código, pero si quiere poder rellenar texto TTF antialias usando una textura interpolada, las cosas son diferentes ... – 6502

Respuesta

1

usted podría tratar de una biblioteca de imágenes como ImageFX, o de un código abierto uno, tratar Graphics32, o la VampyreImagingLIbrary, según su Docs here que soporta algunas operaciones como el trazado de líneas y rectángulos sobre una imagen cargada en un búfer. Esperaría que las bibliotecas de escáner (procesamiento de imágenes) admitan imágenes en escala de grises mejor que las bibliotecas sin imágenes, pero no espero que las bibliotecas de procesamiento de imágenes del escáner estén basadas en la memoria.

Pero si quieres hacer el trabajo directamente en un búfer visible (Mencionas TCanvas), y estás dispuesto a limitarte a Delphi XE, y solo a Windows 7, puedes usar un contexto Direct2D, que admite 16 y profundidades de 32 bits, pero como una profundidad de color de 32 bits aún tendrá una profundidad de 8 bits con respecto a una imagen en escala de grises, creo que todas las bibliotecas de gráficos normales que no son en escala de grises perderán algo de información sobre usted.

Si no te importa usar algo un poco viejo y un poco vinculado a Microsoft Windows, puedes investigar usando el estilo DirectDraw (ahora fusionado en DirectX) para hacer la gestión del búfer (mantener los datos de 16 bits) y permitiéndote dibujar sobre él, también. Sin embargo, no tengo conocimiento de que tenga ningún soporte especial para imágenes en escala de grises de 16 bits.

Curiosamente, WPF tiene soporte para escala de grises de 16 bits de forma nativa. Si pudieras descubrir cómo lo hacen, podrías simular la técnica en Delphi. Ese enlace también analiza el uso de OpenGL para hacer luminancia de 16 bits, pero no hay ninguna sugerencia de la pregunta que OpenGL permite eso. He encontrado personas que intentan usar OpenGL para aplicaciones médicas escritas en la visualización de imágenes delphi (escala de grises de 16 bits), pero no se hace referencia a la modificación de la imagen en la memoria.

+0

.. si no te importa mirar cosas que no sean delphi, echa un vistazo a la biblioteca de imágenes de Python (PIL). Definitivamente puede hacer eso, y leer/escribir TIFF de escala de grises de 16 bits de forma nativa, etc. Se usa mucho en imágenes científicas/médicas. –

+0

Grphics32 (como su nombre lo indica) no admite imágenes en escala de grises de 16 bits. – iamjoosy

+0

?? TCanvas no implica ningún sabor "visual". –

0

Puede usar Gdi + ya que no funcionará en la escala de grises de 16 bits, pero sí funciona en la imagen RGB de 48 bits.

para que podamos convertir 16 bits de datos a los datos RGB de 48 bits mediante la copia del mismo de 16 bits en todas las tres channels.performs algún dibujo y luego otra vez convertir 48 bits de nuevo a 16 bits

Cuestiones relacionadas