Question

Je suis en train d'écrire une bibliothèque à l'interface C # avec la langue de l'imprimante EPL2. Une caractéristique que je voudrais essayer de mettre en œuvre est l'impression d'images, la spécification doc dit

  

p1 = Largeur Largeur graphique de graphique en octets. Huit (8) points = un (1) octet de données.

     

p2 = Longueur du graphique Longueur du graphique en points (ou lignes d'impression)

     

Données = données binaires brutes sans mise en forme de fichier graphique. Les données doivent être en octets. Multiplier la largeur en octets (p1) par le nombre de lignes d'impression (P2) pour la quantité totale de données graphiques. L'imprimante calcule automatiquement la taille exacte du bloc de données sur la base de cette formule.

Je prévois mon image source étant un 1 bit par pixel bmp, déjà mis à l'échelle à la taille. Je ne sais pas comment l'obtenir de ce format pour un octet [] pour moi d'envoyer à l'imprimante. J'ai essayé ImageConverter.ConvertTo(Object, Type) il réussit, mais la tableau, il émet n'est pas la bonne taille et la documentation est très défaut sur la façon dont la sortie est formatée.

Mon code de test en cours.

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

Toute aide est grandement appréciée même si elle est dans une direction tout à fait différente.

Était-ce utile?

La solution 2

dit que je devais utiliser 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);
}

Autres conseils

Si vous avez juste besoin de convertir votre bitmap dans un tableau d'octets, essayez d'utiliser un MemoryStream:

Consultez ce lien: C # l'image pour Tableau d'octets et Tableau d'octets à l'image de classe Converter

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
 MemoryStream ms = new MemoryStream();
 imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
 return  ms.ToArray();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top