C# comport 打印图像

  public string GetLogo()
    {
        string logo = "";
        if (!File.Exists(@"C:\bitmap.bmp"))
            return null;
         BitmapData data = GetBitmapData(@"C:\bitmap.bmp");
         BitArray dots = data.Dots;
         byte[] width = BitConverter.GetBytes(data.Width);

         int offset = 0;
         MemoryStream stream = new MemoryStream();
         BinaryWriter bw = new BinaryWriter(stream);

         bw.Write((char)0x1B);
         bw.Write(‘@‘);

         bw.Write((char)0x1B);
         bw.Write(‘3‘);
         bw.Write((byte)24);

         while (offset < data.Height)
         {
             bw.Write((char)0x1B);
             bw.Write(‘*‘);         // bit-image mode
             bw.Write((byte)33);    // 24-dot double-density
             bw.Write(width[0]);  // width low byte
             bw.Write(width[1]);  // width high byte

             for (int x = 0; x < data.Width; ++x)
             {
                 for (int k = 0; k < 3; ++k)
                 {
                     byte slice = 0;
                     for (int b = 0; b < 8; ++b)
                     {
                         int y = (((offset / 8) + k) * 8) + b;
                         // Calculate the location of the pixel we want in the bit array.
                         // It‘ll be at (y * width) + x.
                         int i = (y * data.Width) + x;

                         // If the image is shorter than 24 dots, pad with zero.
                         bool v = false;
                         if (i < dots.Length)
                         {
                             v = dots[i];
                         }
                         slice |= (byte)((v ? 1 : 0) << (7 - b));
                     }

                     bw.Write(slice);
                 }
             }
             offset += 24;
             bw.Write((char)0x0A);
         }
         // Restore the line spacing to the default of 30 dots.
         bw.Write((char)0x1B);
         bw.Write(‘3‘);
         bw.Write((byte)30);

         bw.Flush();
         byte[] bytes = stream.ToArray();
         return logo + Encoding.Default.GetString(bytes);
    }

    public BitmapData GetBitmapData(string bmpFileName)
    {
        using (var bitmap = (Bitmap)Bitmap.FromFile(bmpFileName))
        {
            var threshold = 127;
            var index = 0;
            double multiplier = 570; // this depends on your printer model. for Beiyang you should use 1000
            double scale = (double)(multiplier/(double)bitmap.Width);
            int xheight = (int)(bitmap.Height * scale);int xwidth =(int)(bitmap.Width* scale);var dimensions = xwidth * xheight;var dots =newBitArray(dimensions);for(var y =0; y < xheight; y++){for(var x =0; x < xwidth; x++){var _x =(int)(x / scale);var _y =(int)(y / scale);var color = bitmap.GetPixel(_x, _y);var luminance =(int)(color.R *0.3+ color.G *0.59+ color.B *0.11);
                    dots[index]=(luminance < threshold);
                    index++;}}returnnewBitmapData(){Dots= dots,Height=(int)(bitmap.Height*scale),Width=(int)(bitmap.Width*scale)};}}publicclassBitmapData{publicBitArrayDots{
            get;set;}publicintHeight{
            get;set;}publicintWidth{
            get;set;}}
时间: 2024-09-29 19:38:26

C# comport 打印图像的相关文章

2014年第五届蓝桥杯试题C/C++程序设计B组——打印图像

题目描述:标题:打印图形 小明在X星球的城堡中发现了如下图形和文字:rank=3 rank=5 ran=6 小明开动脑筋,编写了如下的程序,实现该图形的打印. 程序代码: #define N 70 void f(char a[][N], int rank, int row, int col){ //rank等于1的情形 if(rank==1){ a[row][col] = '*'; return; } int w = 1; int i; for(i=0; i<rank-1; i++) w *=

C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)

在批量打印商品标签时一般都要加上条码或图片,而这类应用大多是使用斑马打印机,所以我也遇到了怎么打印的问题. 一种办法是用标签设计软件做好模板,在标签设计软件中打印,这种办法不用写代码,但对我来说觉得不能接受,所以尝试代码解决问题. 网上搜索一番,找不到什么资料,基本都是说发送ZPL.EPL指令到打印机,而且还是COM/LPT口连接打印机.后来研究.net的打印类库,发现是用绘图方式打印至打印机的,也叫GDI打印,于是思路有了点突破,那我可以用报表工具画好标签,运行报表时,把结果输出位图,再发送至

C# EPL USB 指令打印

1 private void btnPrinter_Click(object sender, EventArgs e) 2 { 3 4 #region ESC 热敏图像点阵像素点读取打印 5 6 //Bitmap bitmap = new Bitmap(@"D:\450X100.bmp"); 7 //NetPOSPrinter netPOSPrinter = new NetPOSPrinter(); 8 //netPOSPrinter.PrintPic(bitmap); 9 10 #e

【Win 10 应用开发】打印UI元素

原文:[Win 10 应用开发]打印UI元素 Windows App支持将UI界面进行打印的功能,这与浏览器中的打印网页的用途相近,其好处就是“所见即所得”,直接把界面上呈现的内容打印下来,比重新创建打印图像方便得多. 要在通用App中实现打印,主要依靠以下几个类型: PrintManager:位于Windows.Graphics.Printing命名空间,主要负责显示打印对话框,设置打印源等操作.在使用时,首先调用GetForCurrentView静态方法得到一个PrintManager实例:

Windows打印体系结构之打印驱动框架

庐山烟雨浙江潮,未到千般恨不消.到得原来无别事,庐山烟雨浙江潮. 1.2.Windows打印驱动框架 Windows的打印驱动从总体架构上来说,包括一个渲染组件和一个配置组件.我们可以回想一下最开始的总体架构图. 渲染组件就是负责将应用程序传来的每一页的绘制命令(GDI命令)转换成打印机用来渲染的命令数据(打印机才能识别的命令)发送到打印机中. 配置组件又包含一个可以让用户进行打选项配置的用户接口组件和一个将打印机的配置和特征传递给应用程序的程序接口. 而相较于Windows的其他硬件设备,比较

【Android应用开发技术:媒体开发】打印

作者:郭孝星 微博:郭孝星的新浪微博 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells Github:https://github.com/AllenWells 在Android 4.4以及更高版本的系统中,提供了直接从Android应用程序打印图片和文字的服务,包括打印图片.HTML页面以及创建自定义打印文档等. 一 打印图片 Android Support Library中的PrintHelper提供了一种打印图片的简单方法,该类

Python爬虫新手进阶版:怎样读取非结构化、图像、视频、语音数据

通过open读取之后会返回一个图像文件对象,后续所有的图像处理都基于该对象进行.上述代码执行后,通过 img.show() 会调用系统默认的图像浏览器查看打开图像进行查看.如图所示. 该对象包含了很多方法可以用来打印输出文件的属性,例如尺寸.格式.色彩模式等. print ('img format: ', img.format) # 打印图像格式 print ('img size: ', img.size) # 打印图像尺寸 print ('img mode: ', img.mode) # 打印

如何使用编程语言画出数学图像

有一次学校有一个科技活动,其中就有一个3d打印机,当时我还很好奇它的工作原理,现在倒是能够理解一些了.要打印3维的,就要将它分割,打印平面重叠形成3维的,同理如何打印平面呢,那就要把平面分成无数的直线,同时又如何打印直线呢,最终还是回到如何打印一个点的问题上来了.我们在本子上画图像时,似乎图像是连续的,然而事实上我们也能明白,其实它是又无数多点构成的,对于计算机中也是如此,如何打印图像呢,也是要将其分割为一定的点然后打印.那么怎么对点进行遍历,将所有点都考虑到呢?这就涉及坐标的知识了,不过计算机

Python综合应用:教你用字符打印一张怀旧风格的照片

1. 前言第一次在学校机房里见到计算机,还是上古时期.计算机型号大概是LASER-310吧,有点记不清了.那会儿,显示器还是单色的,只能显示文本,每行最多显示80个字符.想看图片,印象中只能用针式打印机打印在两侧穿孔的宽行打印纸上,每个像素用一个字符表示,不同的字符代表不同的灰度,就像下图这个样子.有没有感觉到浓郁古风呢?其实,随便一张照片,十几行Python代码,你也可以打印出这样的效果,还可以保存成文件.下面,我就一步一步地演示一下. 2. 打开图片,转为灰度模式 Python用于图像处理的