Pregunta

Yo escribo una biblioteca de interfaz de C # con el lenguaje de impresora EPL2. Una característica que me gustaría tratar de poner en práctica es la impresión de imágenes, el doc especificación dice

  

p1 = Ancho de gráfico Ancho de gráfico en bytes. Ocho (8) puntos = un (1) byte de datos.

     

p2 = Longitud del gráfico Longitud del gráfico en puntos (o líneas de impresión)

     datos binarios

Datos = primas sin formato de archivo gráfico. Los datos deben estar en bytes. Multiplicar el ancho en bytes (P1) por el número de líneas de impresión (P2) para la cantidad total de datos gráficos. La impresora calcula automáticamente el tamaño exacto del bloque de datos en base a esta fórmula.

planeo en la imagen mi fuente es un archivo BMP 1 bit por píxel, ya a escala en tamaño. Sólo que no sé cómo conseguir que a partir de ese formato en el que un byte [] para mí enviar a la imprenta. Probé ImageConverter.ConvertTo(Object, Type) tiene éxito pero el vector al que da salida no es el tamaño correcto y la documentación es muy escaso sobre cómo se formatea la salida.

Mi código de prueba actual.

Bitmap i = (Bitmap)Bitmap.FromFile("test.bmp");
ImageConverter ic = new ImageConverter();
byte[] b = (byte[])ic.ConvertTo(i, typeof(byte[]));

Cualquier ayuda es muy apreciada, incluso si es en una dirección totalmente diferente.

¿Fue útil?

Solución 2

Como dijo que necesitaba usar LockBits

Rectangle rect = new Rectangle(0, 0, Bitmap.Width, Bitmap.Height);
System.Drawing.Imaging.BitmapData bmpData = null;
byte[] bitVaues = null;
int stride = 0;
try
{
    bmpData = Bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, Bitmap.PixelFormat);
    IntPtr ptr = bmpData.Scan0;
    stride = bmpData.Stride;
    int bytes = bmpData.Stride * Bitmap.Height;
    bitVaues = new byte[bytes];
    System.Runtime.InteropServices.Marshal.Copy(ptr, bitVaues, 0, bytes);
}
finally
{
    if (bmpData != null)
        Bitmap.UnlockBits(bmpData);
}

Otros consejos

Si sólo necesita para convertir su mapa de bits en una matriz de bytes, intente utilizar un MemoryStream:

Salida este enlace: C # imagen para matriz de bytes y la matriz de bytes en Image Converter Clase

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
 MemoryStream ms = new MemoryStream();
 imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
 return  ms.ToArray();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top