Domanda

Sto scrivendo una libreria per l'interfaccia C # con il linguaggio della stampante EPL2. Una caratteristica Vorrei cercare di attuare è la stampa di immagini, la specifica doc dice

  

p1 = Larghezza di grafica Larghezza di grafica in byte. Otto (8) punti = una (1) byte di dati.

     

p2 = Lunghezza della grafica Lunghezza di grafica in punti (o linee di stampa)

     

Dati = prime dati binari senza formattare file grafico. I dati devono essere in byte. Moltiplicare la larghezza in byte (P1) per il numero di righe di stampa (p2) per la quantità totale di dati grafici. La stampante calcola automaticamente le dimensioni esatte del blocco di dati sulla base di questa formula.

Ho intenzione di mia immagine di origine essere un file BMP 1 bit per pixel, già scalata a dimensione. Io proprio non so come ottenere da quel formato a un byte [] per me di inviare fuori alla stampante. Ho provato ImageConverter.ConvertTo(Object, Type) riesce ma il matrice emette non è la dimensione corretta e la documentazione è molto carente su come l'output viene formattato.

Il mio codice di prova corrente.

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

Ogni aiuto è molto apprezzato anche se è in una direzione totalmente differente.

È stato utile?

Soluzione 2

detto avevo bisogno di usare 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);
}

Altri suggerimenti

Se avete solo bisogno di convertire il bitmap in un array di byte, provare a utilizzare un MemoryStream:

Dai un'occhiata a questo link: C # immagine per array di byte e array di byte to Image Converter Class

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
 MemoryStream ms = new MemoryStream();
 imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
 return  ms.ToArray();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top