Tengo una matriz 2D de enteros en C#.Cómo convertir una matriz 2-D en una imagen en C#
Cada entrada en la matriz 2-D corresponden a un valor de píxel
¿Cómo puedo hacer que esta matriz 2-D en un archivo de imagen (en C#)
Gracias
Tengo una matriz 2D de enteros en C#.Cómo convertir una matriz 2-D en una imagen en C#
Cada entrada en la matriz 2-D corresponden a un valor de píxel
¿Cómo puedo hacer que esta matriz 2-D en un archivo de imagen (en C#)
Gracias
Aquí es una manera muy rápida, aunque no seguro, de hacerlo:
[Editar] Este ejemplo se llevó 0.035 ms
// Create 2D array of integers
int width = 320;
int height = 240;
int stride = width * 4;
int[,] integers = new int[width,height];
// Fill array with random values
Random random = new Random();
for (int x = 0; x < width; ++x)
{
for (int y = 0; y < height; ++y)
{
byte[] bgra = new byte[] { (byte)random.Next(255), (byte)random.Next(255), (byte)random.Next(255), 255 };
integers[x, y] = BitConverter.ToInt32(bgra, 0);
}
}
// Copy into bitmap
Bitmap bitmap;
unsafe
{
fixed (int* intPtr = &integers[0,0])
{
bitmap = new Bitmap(width, height, stride, PixelFormat.Format32bppRgb, new IntPtr(intPtr));
}
}
y el resultado:
buen ejemplo, pero la imagen no se ve al azar :) :) – Pedery
que tienes razón, lo veo demasiado ... ya que el C# clase 'Random' se basa en un algoritmo matemático definitivo que supongo que no debería ser todo eso sorprendente. – tbridge
Buen ejemplo, pero esto muestra una matriz de 1 dimensión, no 2-D según lo solicitado. – Kohanz
Si tiene la necesidad de ver la velocidad en my Kinect sample. Básicamente, crea un área de memoria y utiliza un puntero inseguro para generar una matriz Int32 hacia la memoria. Un objeto BitmapSource se utiliza para asignar un mapa de bits (imagen) directamente a la misma área. Este ejemplo particular también usa memoria no administrada para hacerlo compatible con P/Invoke.
This blogpost describe la diferencia en el rendimiento del uso inseguro. Parte de esa echar un vistazo a:
Tenga en cuenta que sólo se puede así hacer un Int32 [] - Puntero en lugar de los ejemplos que utiliza Byte [] - puntero.
Si la velocidad no es una preocupación - Bitmap + SetPixel y de guardar en un archivo: http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.setpixel.aspx
Fácil, pero como usted menciona: lento. Increíblemente lento! :) –
Bitmap.LockBits
debería funcionar, si está una imagen de Windows Forms querer.
@ozcanovunc: La gramática ya era perfecta. Es posible que desee leer sobre el tiempo presente progresivo. –
Would proyección de la matriz en una cadena de base 64 para el streaming en un Bitmap
ser lento también?
WinForms o WPF? –