estoy tratando de conseguir un mapa de bits creado a partir de los datos en bruto para mostrar en WPF, mediante el uso de una imagen y un BitmapSource:¿Por qué BitmapSource.Create lanza una ArgumentException?
Int32[] data = new Int32[RenderHeight * RenderWidth];
for (Int32 i = 0; i < RenderHeight; i++)
{
for (Int32 j = 0; j < RenderWidth; j++)
{
Int32 index = j + (i * RenderHeight);
if (i + j % 2 == 0)
data[index] = 0xFF0000;
else
data[index] = 0x00FF00;
}
}
BitmapSource source = BitmapSource.Create(RenderWidth, RenderHeight, 96.0, 96.0, PixelFormats.Bgr32, null, data, 0);
RenderImage.Source = source;
Sin embargo, la llamada a BitmapSource.Create lanza una excepción ArgumentException, diciendo "Valor no lo hace caer dentro del rango esperado ". ¿No es esta la manera de hacer esto? ¿No estoy haciendo esa llamada correctamente?
Gracias, pero ¿cómo diablos se te ocurrió esa expresión? ¿Por qué no es simplemente RenderWidth * 4? ¿No es esa la cantidad de bytes para una línea? –
Disculpa, debería haber proporcionado detalles. En su caso tiene 'bpp = 32' así que sí, la fórmula se reduce a' RenderWidth * 4'. Pero hay casos extraños (los LCD baratos usan 18 bpp) y el hecho de que las líneas de exploración deben alinearse en los límites de 32 bits. Proporcioné la fórmula general y una explicación de cómo encontrarla arriba. Espero que sea dilucidante. – jason
Gracias. Una pregunta más. ¿Qué hace la tilde en un número como ese? –