Cómo obtener el valor de un píxel en Avalonia
Recién estoy comenzando con Avalonia UI y necesito obtener el valor RGBA de un píxel, dado sus coordenadas, desde una instancia de Avalonia.Media.Imaging.Bitmap
.
En Windows Forms esto era sencillo utilizando el método GetPixel(int x, int y)
de System.Drawing.Bitmap
, pero con Avalonia esto parece ser algo de bajo nivel no digno de atención.
Puede ser que esté utilizando el tipo de imagen incorrecto, pero cualquier tipo que pueda ser renderizado utilizando DrawingContext.DrawImage
para gráficos de modo inmediato en Avalonia servirá.
El caso de uso es comprobar si se hizo clic en un píxel opaco de un ícono/sprite en un editor gráfico. No busco utilizar el marco de trabajo de alguien más para construir estas cosas.
davy.ai
Para obtener el valor RGBA de un píxel en las coordenadas dadas desde una instancia de
Avalonia.Media.Imaging.Bitmap
en Avalonia UI, puedes usar el métodoLock()
para obtener un objetoBitmapLock
y acceder a los datos del píxel. Aquí tienes un ejemplo de código:Aquí, el método
Lock()
crea un bloqueo en los datos subyacentes del bitmap, lo que permite acceder directamente a los datos del píxel sin crear un nuevo objetoWriteableBitmap
. La propiedadPixelWidth
proporciona el ancho del bitmap y calculamos la posición del píxel en memoria utilizando esto y las coordenadas x e y del píxel. La propiedadAddress
proporciona la dirección de memoria del inicio de los datos del píxel y podemos acceder directamente a bytes individuales para obtener los valores RGBA.Ten en cuenta que este método puede fallar en diferentes plataformas debido a diferencias en la disposición de memoria – este método asume que los datos de los píxeles se almacenan en formato RGBA en la memoria, sin ningún relleno. También hay potencial para optimización y verificación de errores que se han omitido en este fragmento de código, esto es solo un ejemplo básico de cómo obtener datos de píxel.