Tengo una matriz de bytes de bytes en orden BGR y deseo crear una imagen en C#. ¿Alguien puede ofrecer código o consejo?Programación de píxeles continúa
5
A
Respuesta
1
algo en el sentido de (no probado-)
private Bitmap createImage(int width, int height, byte[] image)
{
int index = 0;
byte r, g, b;
Bitmap bmp = new Bitmap(width, height);
for (y as int = 0; y < height; y++)
{
for (x as int = 0; x < width; x++)
{
b = image[y * width + index];
g = image[y * width + index + 1];
r = image[y * width + index + 2];
bmp.SetPixel(x, y, Color.FromArgb(255, r, g, b));
index += 3;
}
}
return bmp;
}
0
El constructor Bitmap(int width, int height, int stride, PixelFormat format, IntPtr scan0)
para la clase Bitmap
podría ser útil. Depende de cómo se almacenan los datos en la matriz, por supuesto.
1
Es posible que tenga algo como esto:
public static Bitmap TransformBGRArrayToBitmap(byte[] inputValues, int Width, int Height, int Stride)
{
Bitmap output = new Bitmap(Width, Height, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
// Lock the bitmap's bits.
Rectangle rect = new Rectangle(0, 0, Width, Height);
BitmapData outputData = output.LockBits(rect, System.Drawing.Imaging.ImageLockMode.WriteOnly, output.PixelFormat);
// Get the address of the first line.
IntPtr outputPtr = outputData.Scan0;
// Declare an array to hold the bytes of the bitmap.
byte[] outputValues = new byte[outputData.Stride * output.Height];
int inputBytesPP = (1 * Stride)/Width;
int outputBytesBPP = (1 * outputData.Stride)/output.Width;
// Copy the RGB values into the array.
for (int inputByte = 0, outputByte = 0; inputByte < inputValues.Length; inputByte += inputBytesPP, outputByte += outputBytesBPP)
{
//The logic inside this loop transforms a 32 bit ARGB Bitmap into an 8 bit indexed Bitmap
//So you will have to replace it
/*byte pixel = 0x00;
if (inputValues[inputByte] > 0x7F)
{
if (inputValues[inputByte + 1] > 0x7F)
pixel |= 0x01;
if (inputValues[inputByte + 2] > 0x7F)
pixel |= 0x02;
if (inputValues[inputByte + 3] > 0x7F)
pixel |= 0x04;
if ((inputValues[inputByte + 1] & 0x7F) > 0x3F)
pixel |= 0x02;
if ((inputValues[inputByte + 2] & 0x7F) > 0x3F)
pixel |= 0x04;
if ((inputValues[inputByte + 3] & 0x7F) > 0x3F)
pixel |= 0x08;
}
else
pixel = 0x10;
outputValues[outputByte] = pixel;*/
}
System.Runtime.InteropServices.Marshal.Copy(outputValues, 0, outputPtr, outputValues.Length);
output.UnlockBits(outputData);
return output;
}
Cuestiones relacionadas
- 1. Google Maps: mapa de desplazamiento mediante programación de píxeles x
- 2. ¿continúa trabajando en un tiempo?
- 3. La actividad continúa después de finalizar();
- 4. ¿jQuery continúa filtrando si encuentra 0 coincidencias?
- 5. Android El emulador acelerado continúa reiniciando
- 6. WPF ListBox Imagen seleccionada la saga continúa
- 7. Eclipse (con PyDev) continúa lanzando SyntaxError
- 8. Eficacia del sombreado de píxeles suma de todos los píxeles
- 9. Pausa el temporizador y luego continúa
- 10. Django seguimiento de píxeles
- 11. Dispositivo independiente de píxeles
- 12. Editar valores de píxeles
- 13. Establecer la altura mediante programación en LayoutParams como píxeles independientes de la densidad
- 14. android: measureText() Devuelve píxeles basados en píxeles escalados
- 15. Cuál es la relación entre píxeles y píxeles escalados
- 16. Plano rápido de píxeles en WPF
- 17. Píxeles de dibujo en WPF
- 18. píxeles de la cámara girados
- 19. coordenadas de píxeles en diamante
- 20. píxeles en Direct2D
- 21. Android - píxeles a salsas
- 22. píxeles a centímetros?
- 23. Java: Fuentes y Píxeles
- 24. document.execCommand() FontSize en píxeles?
- 25. Convertir píxeles a sp
- 26. CSS - ¿Porcentajes o píxeles?
- 27. Convertir mm a píxeles
- 28. Convertir píxeles a puntos
- 29. C++, ignora la excepción y continúa el código?
- 30. TFS Merging continúa fusionando algunos archivos sin ningún cambio
Podría por favor, dar una muestra de la matriz de modo que sabemos sus dimensiones? Creo que se necesitará la manipulación de la matriz para alterar los contenidos de la matriz antes de crear el mapa de bits. –