日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 串口热敏打印

發(fā)布時間:2024/1/1 C# 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 串口热敏打印 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Printer類代碼:

using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.IO.Ports; using System.Collections; using System.Windows.Forms; using System.Drawing;namespace PrinterTest {public class Printer{private static SerialPort serialPort; //串口public Printer(string portName){try{////串口初始化//serialPort = new SerialPort();serialPort.PortName = portName;serialPort.BaudRate = 9600;//波特率serialPort.Parity = System.IO.Ports.Parity.Odd;//奇校驗serialPort.StopBits = System.IO.Ports.StopBits.One;//停止位OpenPort();}catch{MessageBox.Show(e.ToString());}}public Printer(){try{////串口初始化//serialPort = new SerialPort();serialPort.PortName = "COM2";serialPort.BaudRate = 9600;//波特率serialPort.Parity = System.IO.Ports.Parity.Odd;//奇校驗serialPort.StopBits = System.IO.Ports.StopBits.One;//停止位OpenPort();}catch{MessageBox.Show(e.ToString());}}private void OpenPort(){if (null != serialPort){try{if (!serialPort.IsOpen)serialPort.Open();}catch{MessageBox.Show(e.ToString());}}}private void ClosePort(){try{if (serialPort.IsOpen)serialPort.Close();serialPort.Dispose();}catch{MessageBox.Show(e.ToString());}}public void Write(byte[] data,int len){try{serialPort.Write(data, 0, len);}catch(Exception e){MessageBox.Show(e.ToString());}}/// <summary>/// 向打印機(jī)發(fā)送命令/// </summary>/// <param name="data">命令數(shù)據(jù)</param>public void Write(params byte[] data){try{serialPort.Write(data, 0,data.Length );}catch (Exception e){MessageBox.Show(e.ToString());}}/// <summary>/// 發(fā)送字符串/// </summary>/// <param name="strBuf">要發(fā)送的字符串</param>public void Write(string strBuf){try{byte[] data = ToHex(strBuf, "GB2312");serialPort.Write(data, 0, data.Length);}catch (Exception e){MessageBox.Show(e.ToString());}}/// <summary>/// 根據(jù)編碼方式轉(zhuǎn)換字符串為byte[]/// </summary>/// <param name="str">目標(biāo)字符串</param>/// <param name="charset">編碼方式</param>/// <returns>轉(zhuǎn)換后的byte[]</returns>private byte[] ToHex(string str, string charset)//{if (str.Length % 2 != 0)str += "";Encoding enc = Encoding.GetEncoding(charset);return enc.GetBytes(str);}/// <summary>/// 圖片取模/// </summary>/// <param name="bmp"></param>/// <returns></returns>private byte[,] GetBytesByBMP(Bitmap bmp){//bitArray存儲像素點bool[,] bitArray = new bool[bmp.Height % 8 == 0 ?bmp.Height : (bmp.Height / 8 + 1) * 8, bmp.Width];for (int i = 0; i < bmp.Width; ++i)//獲取圖片點陣{for (int j = 0; j < bmp.Height; ++j){//獲取點的ARGBColor pixel = bmp.GetPixel(i, j);double gray = pixel.R * 0.299 +pixel.G * 0.587 + pixel.B * 0.114;if (gray < 192)//是深色bitArray[j, i] = true;else //非深色(淺色)bitArray[j, i] = false;}}byte[,] res =//存儲字模new byte[bitArray.GetLength(0) / 8, bitArray.GetLength(1)];int resRow = 0, resCol = 0;for (int i = 0; i < bmp.Height; i = i + 8){resCol = 0;for (int j = 0; j < bmp.Width; ++j){byte b = 0;//二進(jìn)制轉(zhuǎn)十進(jìn)制for (int k = (i + 7), p = 0; k > i - 1; --k){b += (byte)((bitArray[k, j] ? 1 : 0) *Math.Pow(2, p++));}res[resRow, resCol++] = b;}++resRow;}return res;}/// <summary>/// 打印圖片/// </summary>/// <param name="bmp">圖片</param>/// <param name="enlarge">放大倍數(shù)</param>public void printImage(Bitmap bmp){byte[,] gImage = GetBytesByBMP(bmp);for (int i = gImage.GetLength(0) - 1; i >= 0; --i){byte lowLen = (byte)((gImage.GetLength(1) << 8) >> 8);byte highLen = (byte)(gImage.GetLength(1) >> 8);Write(0x1B, 0x4B, lowLen, highLen);for (int j = 0; j < gImage.GetLength(1); j++)Write(gImage[i, j]);Write(0x0D);}}} }


調(diào)用類方法:

Printer p = new Printer("COM2");//生成實例 p.Write(myArray,myArray.Lenth);發(fā)送定長數(shù)組 p.Write(0x1B, 0x40);//發(fā)送不定長數(shù)字串 p.Write("發(fā)送字符串 Send String");//發(fā)送字符串 p.printImage(new Bitmap);//發(fā)送圖片

?

總結(jié)

以上是生活随笔為你收集整理的C# 串口热敏打印的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。