CPCL命令打印24位bmp

1 篇文章 0 订阅
1 篇文章 0 订阅

看到很多朋友跟我遇到相似的问题,我把我当初的解决办法贴出来吧。下面的代码是读取24位bmp文件的方法(距离写这个代码有一段时间了,有些注释掉的代码已经忘了干嘛的了)

private static string get24BitBmpData(string filePath)
{
    Bitmap bmp = new Bitmap(filePath);
    byte[] bitArray = { 128, 64, 32, 16, 8, 4, 2, 1 };
    string imgTxt = "";
    Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    BitmapData data = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
    IntPtr firstPix = data.Scan0;

    int rowByteCount = bmp.Width * 3;
    int filledCount = data.Stride - rowByteCount;
    int bytes = data.Stride * data.Height;//Math.Ceiling((double)bmp.Width / 8)
    byte[] rgbValues = new byte[bytes];
    System.Runtime.InteropServices.Marshal.Copy(firstPix, rgbValues, 0, bytes);

    int printRowByteCount = Convert.ToInt32(Math.Ceiling((double)(bmp.Width) / 8));
    int printRowByteFillCount = 4 - (printRowByteCount % 4);
    //int bitFillCount = 8 - (bmp.Width % 8);
    byte[] printData = new byte[(printRowByteCount + printRowByteFillCount) * bmp.Height];

    int byteCount = 0;
    int bitCount = 0;
    int rowPoint = 0;
    for (int i = 0; i < rgbValues.Length; i += 3)
    {
        int rgbValue = rgbValues[i] + rgbValues[i + 1] + rgbValues[i + 2];
        if (rgbValue != (255 * 3))
        {
            printData[byteCount] = Convert.ToByte(printData[byteCount] | bitArray[bitCount]);
        }
        if (bitCount == 7)
        {
            bitCount = 0;
            byteCount++;
        }
        else
        {
            bitCount++;
        }
        if ((rowPoint + 3) == rowByteCount)
        {
            rowPoint = 0;
            if (bitCount > 0)
            {
                byteCount++;
            }
            bitCount = 0;
            byteCount += printRowByteFillCount;
            //if (bitCount + filledCount <= 7)
            //{
            //    bitCount += filledCount;
            //}
            //else
            //{
            //    bitCount = filledCount - 8 + bitCount;
            //    byteCount++;
            //}
            i = i + filledCount;
        }
        else
        {
            rowPoint += 3;

        }
    }

    foreach (byte byteData in printData)
    {
        string hexStr = Convert.ToString(byteData, 16);
        if (hexStr.Length == 1)
        {
            hexStr = '0' + hexStr;
        }
        imgTxt += hexStr;
    }
    bmp.UnlockBits(data);
    return imgTxt.ToUpper();
}


调用这个方法,连接打印机传输命令就行了。

string CRNL = "\r\n";
string imgTxt = get24BitBmpData("xxxx.bmp");
string cmddata = "! 0 200 200 300 1" + CRNL +
                "EG " + 24 + " " + 50 + " 10 10 " + imgTxt + CRNL + 
                "FORM" + CRNL +
                "PRINT" + CRNL;




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: esc命令集是指能够控制打印机的一系列指令。其中,ESC命令是指使用ASCII码中的ESC(Escape)字符作为命令的起始标志。ESC命令集包含了各种不同功能的指令,用于设置打印机的参数、控制打印速度、调整字符间距、选择字体、控制切纸器等。通过发送不同的ESC命令,可以实现对打印输出的多方面控制。 cpcl命令集是一种热敏打印机控制命令语言,它是CITIZEN 公司开发的一套指令。与常规的ASCII码不同,cpcl命令集通常需要以特定的格式进行传输。cpcl命令集主要用于控制打印输出内容的格式,如设定文本字体、大小、对齐方式,添加图像、条形码等元素。通过发送不同的cpcl命令,可以实现对打印输出格式的灵活控制。 tspl命令集是由TPlink公司开发的一种标签打印机指令语言。tspl命令集主要用于控制标签打印机进行标签打印作业。它支持各种标签尺寸和布局的自定义,可以设定文本、图像、二维码、条形码等标签元素的置、大小、字体等属性。通过发送不同的tspl命令,可以实现对标签打印作业的高度定制化。 这三种命令集都是用来控制不同类型打印机的工作。esc命令集主要应用于常见的点阵打印机;cpcl命令集则适用于热敏打印机;tspl命令集则用于标签打印机。通过使用这些命令集,用户可以在打印输出过程中实现各种自定义和灵活控制,以满足不同的打印需求。 ### 回答2: esc命令集是指一种控制打印机的指令集,它是由爱普生公司推出的一种标准命令集,被广泛应用于热敏打印机中。esc命令集包括了各种设置打印机功能和控制打印行为的指令,如打印机初始化、打印文本、打印图、设定字体大小、对齐方式、打印条码、设定打印速度等等。同时,esc命令集还支持一些特殊功能,如自动状态处理、自动进纸、自动切纸等,使得打印机可以更加智能化、高效化地进行打印操作。 cpcl命令集是指一种控制标签打印机的指令集,它是由Zebra Technologies公司开发的一种专为标签打印机设计的命令集。cpcl命令集通过发送一系列指令来控制标签打印机实现各种功能和操作,如定义标签格式、设置打印区域、设定打印内容、打印条码、设定字体和图、设定打印速度等。cpcl命令集还支持一些高级功能,如旋转标签、镜像打印打印数据验证等,这些功能使得标签打印机在标签打印和标签管理方面更加灵活和智能。 tspl命令集是指一种控制标签打印机的指令集,它是由TSC Auto ID Technology公司开发的一种常用命令集。tspl命令集提供了一系列指令来控制标签打印机进行标签打印操作,包括定义标签格式、设置打印字体和图、设定打印区域、打印条码、设定打印速度、打印变量数据等。同时,tspl命令集还支持一些高级功能,如打印数据验证、打印图片、打印QR码、设定打印浓度等。通过tspl命令集,用户可以灵活地控制标签打印机进行标签打印和标签管理,满足不同应用场景的需求。 ### 回答3: ESC命令集是一组由打印机制造商EPSON提供的打印机指令集,用于设置和控制打印机的各种功能和属性。这些指令通常以ESC开头,并用于控制打印机的字符集、字体大小、对齐方式、打印速度、纸张类型等。ESC命令集可以通过发送特定的指令序列来实现各种打印机相关的操作,如打印文本、绘制图形、打印条码等。对于需要与EPSON打印机进行通信的开发者来说,熟悉ESC命令集是非常重要的。 CPCL命令集是由打印机制造商Zebra Technologies提供的一组指令,适用于其系列便携式打印机。CPCL指令被设计用于控制打印机的设置和功能,如设置打印参数、选择字体、对齐文本、打印条码等。与ESC命令集类似,CPCL命令也是通过发送指令序列来实现对打印机的控制。对于需要与Zebra便携式打印机进行通信和开发的人员,掌握CPCL命令集是非常重要的。 TSPL命令集是由打印机制造商TSC Auto ID Technology提供的打印机指令集。TSPL指令被设计用于控制TSC打印机的设置和功能,如设置打印参数、选择字体、对齐文本、打印条码等。通过向打印机发送特定的指令序列,可以实现对打印机的各种操作。了解TSPL命令集可以帮助开发人员有效地利用TSC打印机的功能和性能,并实现定制化的打印需求。 综上所述,ESC命令集、CPCL命令集和TSPL命令集都是一组用于控制打印机的指令集合。它们可以通过发送特定的指令序列来实现对打印机的各种设置和功能的控制。对于需要与EPSON、Zebra或TSC打印机进行通信和开发的人员来说,了解和熟悉相应的命令集是非常重要的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值