1

C#をEPL2プリンター言語とインターフェイスするライブラリを作成しています。私が実装しようとしている機能の1つは、画像の印刷です。仕様書には次のように書かれています。

p1=グラフィックの幅バイト単位のグラフィックの幅。8ドット=1バイトのデータ。

p2 =グラフィックの長さドット(または印刷行)単位のグラフィックの長さ

データ=グラフィックファイル形式のない生のバイナリデータ。データはバイト単位である必要があります。グラフィックデータの合計量については、バイト単位の幅(p1)に印刷行数(p2)を掛けます。プリンタは、この式に基づいてデータブロックの正確なサイズを自動的に計算します。

ソース画像は1ピクセルあたり1ビットのbmpファイルで、すでにサイズに合わせてスケーリングされていることを計画しています。そのフォーマットからbyte[]に変換して、プリンターに送信する方法がわかりません。成功してみImageConverter.ConvertTo(Object, Type)ましたが、出力される配列が正しいサイズではなく、出力のフォーマット方法に関するドキュメントが非常に不足しています。

私の現在のテストコード。

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

まったく別の方向に進んでいても、どんな助けでも大歓迎です。

4

2 に答える 2

0

ビットマップをバイト配列に変換する必要がある場合は、MemoryStreamを使用してみてください。

このリンクをチェックしてください:C#Image toByteArrayおよびByteArrayto 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();
}
于 2010-04-07T15:42:10.090 に答える
0

SLaksが言ったように、私は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);
}
于 2012-11-09T15:19:28.987 に答える