首页 公司介绍 资讯中心 案例展示 服务推荐 常见问题 维修项目 联系我们 PCB抄板咨询热线:0755-83035861 / 83035836 / 83346939

芯片解密 当前位置:世纪芯PCB抄板集成电路有限公司 >> 芯片解密 >> 浏览文章

嵌入式Linux的B超图像打印的实现

     近年来由于普及的需要,小型B超越来越多地出现在市场上。这种设备的特点是体积小,售价低,但是功能比较单一,常用于空间限制或者对成本比较敏感的场合。目前多数小型B超基于8位微处理器,限于其处理器的有限处理能力,只配备标准视频(Video)接口作为其图像输出通道,因此只能使用视频打印机(Video Printer)作为图像输出设备。这种配置带来若干缺点,首先视频打印机通常价格昂贵而且必须使用专用打印纸,打印成本较高,这与小型B超的低成本诉求相矛盾;其次数字形式的图像信号必须经过一次D/A转换才能变换成模拟的[1]视频信号,这不仅增加了电路的复杂性而且容易引起图像质量下降。也有一些小型B超仪基于个人计算机(Personal Computer, PC)和Windows平台,在这一平台上使用普通的喷墨或者激光打印机输出超声图像,上述问题得以解决[1][2]。但是这一平台价格高,体积和功耗都较大,而且稳定性不够好,对于小型B超并不是一个理想的选择。

    对于小型B超而言,比较理想的方案是在嵌入式平台上实现普通喷墨或者激光打印机图像输出。近年出现的32位[3]及64位嵌入式微处理器集成度高,处理速度快,接口丰富,为这一方案的实现提供了可能。由于32位和64位嵌入式处理器适合使用Linux和Windows CE等操作系统,因此相对8位处理器来说软件开发也比较简单。其中由于Linux是一种开源和免费的系统,因此所受到的支持特别多,资源很丰富,尤其适合于本文所涉及的应用对象。
    本文实现了一种基于32位嵌入式微处理器ARM9200的B超图像打印方案,使用嵌入式Linux作为其操作系统,在HP DeskJet和Epson Stylus Photo系列喷墨打印机上成功打印出256灰度级的B超图像。
    1、Linux下的打印方案
    基于PC的Linux已经有了多种相当完善的打印方案,不仅可以在多种系列的普通喷墨或激光打印机上输出照片质量的彩色和黑白图像,而且支持多打印任务处理和多打印机控制。图1是广泛使用的基于PC Linux的打印方案的一个例子,在这个方案中,CUPS(Common UNIX Printing System)[4]是其核心,多任务管理由CUPS中的“打印管理”模块担任,打印格式转换则由其滤波器(Filter)[5]系统完成。CUPS将Linux传送过来的各种格式的文档通过适当的滤波器转换成PS (PostScript)语言 [6]代码,这一代码可以通过Backend直接输出至支持PS
    图1  Linux下的打印方案
    语言的打印机,也可以再通过调用GhostScript程序转换成非PS语言打印机所使用的各种页面描述语言(Page Description Language, PDL)[7], 然后经Backend输出。特别要注意的是除了这两种Filters,CUPS还具有不经过GhostScript程序而将图像文件(image)直接转换成非PS打印语言的Filter。由于历史的原因,基于Linux的几乎所有打印方案都支持PS语言,PS打印机接收到这种文件后,利用其内嵌的光栅图像处理器RIP(Raster Image Processor)[8]将PS描述转换成指令驱动打印机工作。由于版权费的问题,近年来支持非PS语言的打印机大量出现,而且渐渐成为普通喷墨和激光打印机的主流。这些非PS语言有HP公司的PCL(Print Control Language)[9],Epson公司的ESC/P[10]等。GhostScript[6]是一种软件RIP,用于将PS文件转换成非PS设备支持的PDL格式。Foomatic是用户统一界面,用户通过它来配置打印机参数与驱动,只需选择打印机型号而无需关心配置的具体过程。
    这是一个完备的方案,功能强大,操作简便,支持的打印机丰富,完全满足B超图像输出的要求。但由于嵌入式平台资源有限,难以支持这样一个完备的系统,所以我们根据需要对其进行适当剪裁。
    2、基于嵌入式Linux的小型B超仪的打印方案和实现
    本文所关心的小型B超仪的硬件平台是一个32位的嵌入式微处理器,操作系统采用嵌入式Linux, 在这个平台上要完成的工作有超声图像的传送,显示,打印,人机界面,整机控制,还有非易失性存贮,如CF卡(Compact Flash Card)、SD卡(Secure Digital Memory Card) 存贮等。如图2所示,打印控制只是其中的一个功能。打印机输出的对象是256×256像素,256灰度级的黑白图像。为了重现这些灰度级,图像的每个像素(pixel)需要由16×16个墨点(dot)来表达,因此输出图像的横向和纵向的墨点数将是256×16=4096dots。如果输出图像的尺寸为10cm×10cm(3。94“×3。94”),可以算出打印机的分辨率需要达到4096/3。94=1040dpi(dots per inch)。为此,我们选用分辨率为1200dpi的HP DeskJet和1440dpi Epson Photo系列喷墨打印机,这两个系列的打印机使用USB接口,分别支持PCL语言和ESC/P语言。它们性能优良,都可以输出照片质量的图像, 而且便宜实用,有A4幅面的便携式型号可供选用,非常适合小型B超。
    图2 基于嵌入式Linux的小型B超仪控制系统
    从图1可知,利用CUPS把图像文件转换成所选用打印机支持的页面描述语言有三条转换路径,一条是通过ImagetoPS, PStoRaster和RastertoHP(或RastertoEpson)三个过滤器;pcb抄板第二条是通过ImagetoRaster和RastertoHP(或RastertoEpson)两个过滤器;第三条是先通过Imagetops过滤器把图像文件转换成PS文件,然后再调用GhostScript程序把PS文件转换成PCL或ESC/P文件。在这三条路径中,第一条和第三条都先把图像文件转换成PS格式,然后再作进一步的变换,体现了Linux的传统要求,但是第一条路径用到了三个过滤器,第三条路径需要调用一个庞大的GhostScript程序。相比之下第二条路径最为简捷而节省资源,所以本文选用这一条路径,Backend过滤器选用USB以配合所选打印机的接口。图1中的虚线表示了本文选用的实现路径,而其中的灰色框代表了为本系统用到的过滤器。