精华内容
下载资源
问答
  • 在python tkinter Canvas画图和显示图像,可以将所画图形和显示图像保存为postscript类型文件,这不是通用的文件格式。本文介绍将其保存为通用格式文件的5种方法。

    在计算机上画图未完成,需要保存未完成图形以便以后继续,或者完成画图,要保存为通用格式文件,方便浏览。如使用python tkinter Canvas画图,其好像没有将图像保存通用格式文件的方法,但可以将图像保存为postscript类型文件,这是一种页面描述语言,主要用于高质量打印。为了将Canvas图像保存为通用格式文件,网上介绍了许多种方法。一个网页介绍了将canvas中的图形图像保存为通用格式文件的5种方法,这里把该网页中翻译的相关文字、代码和个人的理解,写在下面,供大家参考,理解不对之处请指正。网址如下:https://stackoverflow.com/questions/9886274/how-can-i-convert-canvas-content-to-an-image
    介绍第1种方法,首先将canvas的图像保存为postscript类型文件代码如下,扩展名可为ps或esp。代码有修改,能够正确运行。

    from tkinter import *
    root = Tk()
    cv = Canvas(root)
    cv.create_rectangle(10,10,50,50)
    cv.pack()
    cv.update()
    cv.postscript(file="a.ps", colormode='color')    #扩展名可为ps或esp
    root.mainloop()
    #cv.postscript(file="saved.ps", height=100, width=100, colormode="color")
    

    将canvas的图形图像保存为postscript类型文件后,无论文件扩展名为ps还是esp,都可用软件ImageMagick或Ghostscript等软件查看,并保存为通用格式文件。据说Adobe Photoshop能打开esp文件。但似乎canvas没有提供读postscript类型文件方法。
    介绍第2种方法,是在PIL Image和tkinter Canvas上同时绘制相同的图像,可用PIL Image保存为jpg图像。个人认为该法有很大局限,在tkinter Cabvas上绘图,可移动图形或图像,放大或缩小或图像,删除图形或图像,PIL Image如何实现?该代码未做验证。

    from Tkinter import *
    import Image, ImageDraw
    width = 400
    height = 300
    center = height//2
    white = (255, 255, 255)
    green = (0,128,0)
    root = Tk()
    # Tkinter create a canvas to draw on
    cv = Canvas(root, width=width, height=height, bg='white')
    cv.pack()
    # PIL create an empty image and draw object to draw on
    # memory only, not visible
    image1 = Image.new("RGB", (width, height), white)
    draw = ImageDraw.Draw(image1)
    # do the Tkinter canvas drawings (visible)
    cv.create_line([0, center, width, center], fill='green')
    # do the PIL image/draw (in memory) drawings
    draw.line([0, center, width, center], green)
    # PIL image can be saved as .png .jpg .gif or .bmp file (among others)
    filename = "my_drawing.jpg"
    image1.save(filename)
    root.mainloop()
    
    

    介绍第3种方法是调用PIL库中的ImageGrab.grab()函数,实现截屏,这个函数的参数是截取矩形的左上和右下坐标,不带参数的话默认截全屏。其缺点是Canvas尺寸超过屏幕尺寸,不能得到Canvas所有图形和图像。代码如下,该代码未做验证。

    from PIL import ImageGrab
    def getter(widget):
        x=root.winfo_rootx()+widget.winfo_x()
        y=root.winfo_rooty()+widget.winfo_y()
        x1=x+widget.winfo_width()
        y1=y+widget.winfo_height()
        ImageGrab.grab().crop((x,y,x1,y1)).save("file path here")
    
    

    以下是原文作者对其的说明:命令root.winfo_rootx()和root.winfo_rooty()获取整个根窗口左上角的像素位置。然后,将widget.winfo_x()和widget.winfo_y()添加到其中,基本上就是获取您想要捕获的小部件左上角像素的像素坐标(在屏幕的像素(x,y)处)。然后找到小部件左下角的像素(x1,y1)。grab()生成一个截屏,然后我对其进行裁剪,以只获得包含小部件的位。尽管不是完美的,也不能制作出最好的图像,但对于获取任何小部件的图像并保存它来说,这是一个很好的工具。应该只能用于Window。
    个人认为,也许截全屏,然后用类似画图等软件,再截取有用部分保存更方便。
    介绍的第4种方法,使用Pillow转换从Postscript为PNG文件,其代码如下:

    from PIL import Image
    def save_as_png(canvas,fileName):
        # save postscipt image 
        canvas.postscript(file = fileName + '.eps') 
        # use PIL to convert to PNG 
        img = Image.open(fileName + '.eps') 
        img.save(fileName + '.png', 'png') 
    

    为了能正常运行,自己编写的验证代码如下:

    from tkinter import *
    from PIL import Image
    root = Tk()
    cv = Canvas(root)
    cv.create_rectangle(10,10,50,50)
    cv.pack()
    cv.update()
    cv.postscript(file="a.eps",colormode='color')       #如将扩展名改为ps,出错信息相同
    img = Image.open("a.eps")
    img.save("a.png", "png")	#运行后,此句出错
    root.mainloop()
    

    运行出错信息如下:
    C:/Users/gengzhaoying/AppData/Local/Programs/Python/Python38/python.exe d:/myPythonFile/保存为postscript文件1.py
    Traceback (most recent call last):
    File “d:/myPythonFile/保存为postscript文件1.py”, line 10, in
    img.save(“a.png”, “png”)
    File “C:\Users\gengzhaoying\AppData\Local\Programs\Python\Python38\lib\site-packages\PIL\Image.py”, line 2130, in save
    self._ensure_mutable()
    File “C:\Users\gengzhaoying\AppData\Local\Programs\Python\Python38\lib\site-packages\PIL\Image.py”, line 619, in _ensure_mutable
    self._copy()
    File “C:\Users\gengzhaoying\AppData\Local\Programs\Python\Python38\lib\site-packages\PIL\Image.py”, line 612, in _copy
    self.load()
    File “C:\Users\gengzhaoying\AppData\Local\Programs\Python\Python38\lib\site-packages\PIL\EpsImagePlugin.py”, line 332, in load
    self.im = Ghostscript(self.tile, self.size, self.fp, scale)
    File “C:\Users\gengzhaoying\AppData\Local\Programs\Python\Python38\lib\site-packages\PIL\EpsImagePlugin.py”, line 134, in Ghostscript
    raise OSError(“Unable to locate Ghostscript on paths”)
    OSError: Unable to locate Ghostscript on paths

    无论转换文件的扩展名是eps或ps,都会发生系统错误:OSError: Unable to locate Ghostscript on paths,翻译为中文:无法在路径上定位Ghostscript。其实本人使用的计算机根本未安装所要求的Ghostscript库。这说明该方法要求安装postscript库。下载Ghostscript库网址为:https://www.ghostscript.com/download/gsdnld.html
    介绍的第5种方法,使用window操作系统的API拷屏。其缺点是Canvas尺寸超过屏幕尺寸,不能拷贝Canvas所有图形和图像。这段代码未验证。

    import win32gui
    from PIL import ImageGrab
    HWND = canvas.winfo_id()  #得到canvasID
    rect = win32gui.GetWindowRect(HWND)  # 得到canvas的矩形坐标
    im = ImageGrab.grab(rect)  #得到屏幕指定矩形处包含所有点颜色的Image对象
    

    以上5种方法都不能实现画图未完成,保存未完成图形,以便以后重新打开该文件,继续工作的功能。

    展开全文
  • BMP图像文件格式(4)

    2021-05-10 06:10:12
    本文转自《》一书 5.1.3 分析BMP图像文件结构结合上面对BMP文件的分析,下面分别对256色和24位色的BMP图像进行十六进制分析,通过在十六进制编辑器分析文件结构,能够增加分析文件的经验。如图5-1和图5-2所示,...

    本文转自《》一书 5.1.3 分析BMP图像文件结构

    结合上面对BMP文件的分析,下面分别对256色和24位色的BMP图像进行十六进制分析,通过在十六进制编辑器中分析文件结构,能够增加分析文件的经验。

    如图5-1和图5-2所示,分别为256色BMP图像cat2.bmp和24位色BMP图像cat1.bmp。其中cat2.bmp图像的分辨率为200×153,文件大小为31 680字节。cat1.bmp图像的分辨率为200×150,文件大小为90 056字节。

    image012.jpg      

    image013.jpg

    图5-1 cat2.bmp图像                         图5-2 cat1.bmp图像

    现在来分析cat2.bmp的图像文件,在Winhex中打开cat2.bmp,如图5-3所示。

    image014.jpg

    图5-3 在Winhex中打开cat2.bmp图像文件

    首先分析位图文件头的结构,如图5-4所示。根据BMP文件的位图文件头结构定义分析出cat2.bmp图像的位图文件头中各字段的含义,如表5-6所示。

    image015.jpg

    图5-4 cat2.bmp图像文件的位图文件头

    表5-6                         cat2.bmp图像文件中位图文件头各字段的含义

    十六进制值 描    述

    42 4D: BM的ASCII值,在Windows中的BMP文件标识符

    C0 7B 00 00 7B C0h=31680,是cat2文件的大小

    00 00 00 00 保留值,总为0

    36 04 00 436h=1078,是图像数据的地址,即文件头+信息头+调色板的长度

    继续分析接下来的数据,根据BMP文件结构的定义,接下来的数据是位图信息头,cat2.bmp图像文件的位图信息头的内容如图5-5所示。

    image016.jpg

    图5-5 cat2.bmp图像的位图信息头

    表5-7所示为cat2.bmp图像文件中位图信息头各字段的含义。

    表5-7                         cat2.bmp图像文件中位图信息头各字段的含义

    十六进制值 描    述

    28 00 00 00: cat2.bmp图像的位图信息头大小

    C8 00 00 00 00 00 00 C8 = 200,是cat2图像的宽度,单位像素

    99 00 00 00 00 00 00 99 = 153,是cat2图像的高度,单位像素

    01 00 总是1

    08 00 00 08 = 8,cat2图像的色深,即2的8次幂等于256色

    00 00 00 00 压缩方式,0表示不压缩

    8A 77 00 00 00 00 77 8A = 30602,是cat2图像的图像数据大小,单位字节

    12 0B 00 00 00 00 0B 12 = 2834,cat2图像的水平分辨率,单位像素/m

    12 0B 00 00 00 00 0B 12 = 2834,cat2图像的垂直分辨率,单位像素/m

    00 00 00 00 cat2图像使用的颜色数,0表示使用全部颜色

    00 00 00 00 cat2图像中重要的颜色数,0表示所有颜色都重要

    继续分析接下来的数据,根据BMP文件结构的定义,因为cat2.bmp图像是256色的位图,所以应该有256个调色板,每个调色板占4字节,整个调色板一共1024字节大小。 cat2.bmp图像文件的调色板数据如图5-6和图5-7所示。

    image017.jpg

    图5-6 cat2.bmp图像的调色板地址从00000036h开始存储

    image018.jpg

    图5-7 cat2.bmp图像的调色板数据结束地址是00000435h

    从图5-6和图5-7中可以看出,cat2.bmp图像的调色板地址从00000036h开始到00000435h结束,即00000435h – 00000036h + 1 =400h = 1024。

    image019.gif如果想查看cat2图像的调色板对应的实际显示颜色,可以使用Adobe Photoshop CS打开cat2.bmp,在Adobe Photoshop CS的菜单栏中选择“图像”→“模式”→“颜色表”,即可观看cat2的调色板,如图5-8所示。

    图5-8所示cat2.bmp的调色板颜色和图5-6中的十六进制数据是一一对应的。在Adobe Photoshop CS的调色板上单击任何一个像素的颜色即可弹出一个拾色器对话框显示该像素颜色的详细组成信息。cat2.bmp调色板和cat2.bmp的十六进制数据的对应关系如图5-9所示。

    继续分析接下来的数据,根据BMP文件结构的定义,如果一个图像有调色板,那么紧跟在调色板后面的是图像的数据,这些数据不是实际的颜色值,而是指向调色板数组的索引,根据索引来获取调色板中的颜色,如图5-10所示。

    image021.jpg

    图5-9 cat2.bmp调色板和cat2.bmp的十六进制数据的对应关系

    image022.jpg

    图5-10 cat2.bmp的图像数据

    因为cat2.bmp是256色的位图,即采用了8位色深作为指向调色板数组的索引,所以根据图5-10中显示的数据可以得知:49 49 49 B1 49 49 49 49 49 99表示cat2.bmp位图左下角第1个像素的颜色等于调色板[49],第2个像素的颜色等于调色板[49] ,第3个像素的颜色等于调色板[49] ,第4个像素的颜色等于调色板[B1]……依此类推。分析完cat2.bmp图像之后,接下来分析的是cat1.bmp。

    cat1.bmp图像是24位色图像,根据BMP文件结构定义得知,cat1.bmp图像没有调色板,图像数据存储的是实际的颜色数据,每个像素用3字节表示,分别是红绿蓝。由于cat1.bmp和cat2.bmp的位图文件头和位图信息头结构一样,所以cat1.bmp的位图文件头和位图信息头可以参考上面对cat2.bmp的分析,下面从cat1.bmp的位图信息头结束的位置开始分析,如图5-11所示。

    uid-20622737-id-1912898.html

    图5-11 cat1.bmp图像的图像数据

    从图5-11可以看到表示每个像素的红绿蓝三色的值,实际存放的时候是倒过来存放的,在分析BMP图像格式时需要注意这点。

    通过上面对BMP文件存储结构的分析发现,BMP文件的位图文件头和位图信息头存在着大量的重复数据。如果存储大量同一色深的BMP位图,必然会浪费大量存储空间,所以很多时候游戏编程人员都会去掉BMP文件头和信息头,只保留几个必要的信息和图像数据,那么BMP文件头和信息头中哪几个字段是必须保留的呢?

    使用Winhex的文件比较功能比较两个24位色深的BMP图像文件,观察两个文件的文件头和信息头有什么不同的地方,如图5-12所示。

    uid-20622737-id-1912898.html

    图5-12 使用Winhex比较两个24位色深的BMP图像文件

    从图5-12可以看出,两个色深相同的BMP图像的文件头和信息头一共有4处不同的地方,分别是文件头的文件大小、信息头的图像宽度、图像高度和图像数据大小。

    所以很多时候,游戏编程人员只保留图像文件的文件大小、图像宽度、图像高度和图像数据大小信息,甚至有时不需要保留文件大小这个数值,使用图像数据大小数值即可。

    在分析未知文件存储格式时,如果遇到去掉了文件头的文件时,如上面所说的BMP文件,会给分析未知文件格式带来一定的困难。这时需要使用十六进制编辑器的文件比较功能,观察两个同类的未知文件格式寻找某些潜在的规律,如果实在观察不出规律的,那只能使用白盒分析方法,对调用此未知文件格式的程序进行反汇编跟踪调试了。当然,有时灵感和运气也很重要。

    展开全文
  • 计算机图像显示原理与BMP图像文件格式:一、计算机图像显示原理简述1.计算机图像分类:2.显示3.彩色图转灰白图原理二、BMP图像1.BMP/.JPG/.PNG2.组成(1)文件头(2)信息头(3)调色板(4)图像数据区 一、...

    本篇文章详细讲述图像文件,里面有一些阐述为个人理解,如有不对的地方欢迎指正,后续会修正补全。


    一、计算机图像显示原理简述

    1.计算机图像分类:

    关于计算机图像,可以分为两类:位图(Bitmap)和矢量图(Metafile)。

    位图由许多的矩形块组成,每个矩形代表一个点,点的个数等于位图的横向矩形块的个数乘上纵向矩形块的个数,每一个点则被称为像素点,而且每个像素点都有确定的颜色,因此形成了一幅完整的图像。通常使用的图像大部分是位图,如相机拍摄的照片,因为位图可以表示图像的细节,能够较好的还原现实场景。位图的缺点是体积比较大,因此产生了很多压缩图像格式来存储位图图像,目前应用最广的是JPEG格式,另外还有GIF、PNG等。而且位图在放大时,会出现“锯齿”现象,就是所谓的失真,这也由位图的本质特点决定。所以在现实中,还需要使用另外一种图像格式:矢量图。

    矢量图在一些商标设计上使用比较多,矢量图同位图不同,矢量图是利用数学公式通过线段绘制出来的,所以不管如何放大都不会出现失真现象,但是矢量图不能描述非常复杂的图像。所以各种图形图案、CAD软件等等都是使用矢量格式来保存文件。


    2.显示

    跟PE文件有32位和64位一样,位图也是要分位数的,分类依据主要是像素的位数。

    位图的每个像素采用不同的位数(即BMP的图像深度),就可以表示出不同的颜色,不同位图的颜色数量计算如下:

    • 4位图像:2^4=16
    • 8位图像:2^8=256
    • 16位图像:2^16=65536
    • 24位图像:2^24=16777216

    n位图说明n个二进制位是一个像素,这一个像素中再分配给透明度和RGB三原色各一个数值,每一个数值代表该颜色的亮度,因为没有亮度分量,亮度直接可以从颜色分量中得到,每一颜色分量值的范围都是0~255,某一颜色分量的值越大,就表示这一分量的亮度越高,所以可以理解为一个像素由三个平面叠加【一个平面(n/4位二进制数)代表RGB中的一个颜色或一个元素】,无数个这样的像素叠加形成一个BMP图像。

    对于现在的计算机,一般使用32位来表示颜色,32位平分给四个分量,也就是每个分量8位。(红蓝绿每种颜色可以分8种,另一个分量是透明度)这三种颜色组合起来就有256 * 256 * 256 = 16777216种颜色,基本可以表示大自然的任意色彩。


    3.彩色图转灰白图原理

    在24位彩色图像中,3个字节分别表示R、G、B三种颜色分量,在RGB表示方式中,。一个真彩色像素点转换为灰度图时它的亮度值则采用了心理学灰度公式计算:

    Y=0.299R+0.587G+0.114B
    

    使用上述公式转换时得到的灰度图最接近人眼对灰度图的感觉。灰度图中颜色数量一共只有256种(8bit),所以转换后的图像保存为8位格式(8位图像),可以节省空间。因此彩色图像转变为灰度图像是不可逆的过程。调色板中可以保存256颜色,所以可以正好将256种灰度颜色保存到调色板中。


    二、BMP图像

    1.BMP/.JPG/.PNG

    每张图片都是由像素块组成的,每个像素块都是可以由三原色组合而成的,三原色中的每一种颜色都可以用二进制来表示,不同的组合方案则显示不同颜色,在计算机显示图片当中会有压缩图片或解析图片的软件,于是计算机就能够显示图片了。

    • bmp: BMP图像文件(Bitmap-File)格式是Windows采用的图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。Windows 3.0以后的BMP文件都是指设备无关位图(DIB,device-independent bitmap)。BMP位图文件默认的文件扩展名是.BMP,有时它也会以.DIB或.RLE作扩展名。图片需要保存多少个点的数据就是实实在在多少个点的数据 ,没有进行压缩,类比源代码,这便是最原始的图像。

    • jgp: 图片进行了压缩 ,两种多种颜色的色差看起来不明显,将它们归纳为同一种颜色显示。JPEG的压缩方式通常是破坏性资料压缩,即在压缩过程中图像的品质会遭受很大的破坏。一张图片在多次覆盖保存后,图片会逐渐失真。

    • png: 算法类似于jpg ,是一种无损数据压缩,根据人的视觉在人可识别的颜色范围外的颜色被算法隐藏。

    相对占用空间:BMP > PNG > JPG

    2.组成

    BMP图像文件由4部分组成:

    • 文件头(BMP file header):文件的格式、大小等信息,通常,在BMP图片装载入内存后,此部分将被抛弃;
    • 信息头(Bitmap information):每像素所使用的位数、图片宽度、高度(一般为负数,当信息头的参数高为正数时,图片将是倒立的)、压缩方式、颜色索引等信息。虽然这个结构标准不一,但大多数BMP图片依然是windows NT是发布的组成结构,不同的BMP格式标准的区别主要在于信息头的大小,这可以通过信息头的第一个参数(长为四个字节的DIB Header Size)区分分辨;
    • 调色板(color palette):可选,一般位数小于8的时候存在,如使用索引来表示图像,调色板就是索引与其对应的颜色的映射表,为节省空间而存在;
    • 位图数据(bitmap data):图像数据区,也叫像素组,记录每个像素点具体的颜色或颜色索引;
      由于计算机一次处理四字节的效率更好,所以像素组的扫描行有比特补零的标准(字节对齐)。也就是说如果一张图片的尺寸是121120,它的BMP的像素组尺寸实际是124120,多出的位置零,但信息头的参数宽不因此改变,是121

    具体结构字段如下,为了更直观的看到,我们结合案例,同时给出BMP案例图。
    在这里插入图片描述

    (1)文件头

    typedef struct tagBITMAPFILEHEADER
    {
    UINT16 bfType;//2Bytes,必须为"BM",即0x424D,才是Windows位图文件
    DWORD bfSize;//4Bytes,整个BMP文件的大小(图片大小计算:bfOffBits + 长(像素) X 宽(像素) X 位数(每个像素占的位数) 。例如对于128X128X24位的图像  bfSize=128X128X24 + 54+sizeof(RGBQUAD)*256)
    UINT16 bfReserved1;//2Bytes,保留,为0
    UINT16 bfReserved2;//2Bytes,保留,为0
    DWORD bfOffBits;//4Bytes,文件起始位置到图像像素数据的字节偏移量,
    }BITMAPFILEHEADER;
    

    在这里插入图片描述
    文件大小计算:54+1152 * 648 * 3 == 2239542

    • 位图文件头+位图信息头+调色板 的大小:54
    • 位图宽:1152(0x480)
    • 位图高:648(0x288)
    • 一个像素占的字节:24bit/8 ==3
      在这里插入图片描述

    (2)信息头

    typedef struct_tagBMP_INFOHEADER
    {
    DWORD biSize;//4Bytes ,INFOHEADER结构体大小,存在其他版本INFOHEADER,用作区分
    LONG biWidth;//4Bytes,图像宽度(以像素为单位)
    LONG biHeight;//4Bytes,图像高度,指明该图像是倒向的位图,还是正向的位图(+:图像存储顺序为倒向,-:图像存储顺序为正向)
    WORD biPlanes;//2Bytes,图像数据平面,BMP存储RGB数据,因此总为1
    WORD biBitCount;//2Bytes,图像像素位数
    DWORD biCompression;//4Bytes,0:不压缩,1:RLE8,2:RLE4
    DWORD biSizeImage;//4Bytes, 4字节对齐的图像数据大小
    LONG biXPelsPerMeter;//4Bytes,用像素/米表示的水平分辨率
    LONG biYPelsPerMeter;//4Bytes,用像素/米表示的垂直分辨率
    DWORD biClrUsed;//4Bytes,实际使用的调色板索引数,0:使用所有的调色板索引
    DWORD biClrImportant;//4Bytes,重要的调色板索引数,0:所有的调色板索引都重要
    }BMP_INFOHEADER;
    

    在这里插入图片描述
    对比属性面板的分辨率,可以看出位图宽高是一致的。
    在这里插入图片描述

    (3)调色板

    typedef struct_tagRGBQUAD
    {
    BYTE rgbBlue; //指定蓝色强度
    BYTE rgbGreen;//指定绿色强度
    BYTE rgbRed; //指定红色强度
    BYTE rgbReserved;//保留,设置为0
    }RGBQUAD;
    

    (4)图像数据区

    根据信息头的biBitCount(颜色位数)从左到右,从下到上记录位图的每一个像素值(也就是说最上面的数据其实记录的是位于图像最下面的像素)像素值也是倒着念的,原始数据是按B、G、R的顺序排列的。

    • 当biBitCount=1时,8个像素占1个字节,黑白图,位图数据是指向调色板的索引序号,可以根据需要选择压缩与不压缩;
    • 当biBitCount=4时,2个像素占1个字节,16色图,位图数据是指向调色板的索引序号,可以根据需要选择压缩与不压缩,如果选择压缩,则采用RLE4算法;
    • 当biBitCount=8时,1个像素占1个字节,256色图,位图数据是指向调色板的索引序号,可以根据需要选择压缩与不压缩,如果选择压缩,采用的是RLE8算法;
    • 当biBitCount=16时,1个像素占2个字节,图像的颜色直接在位图数据中给出;有RGB555(5位红5位绿5位蓝)和RGB565(5位红6位绿5位蓝)两种情况,BMP图片不压缩时(信息头的参数Compress = 0),使用的就是RGB555模式,即R、G、B三个通道分别用五位,最高位悬空置零。
    • 当biBitCount=24位时,1个像素占3个字节,R、G、B三个通道分别用八位,真彩色图
    • 当biBitCount=32位时,R、G、B三个通道依旧分别用八位,除了RGB,还有Alpha通道,即透明色。

    之前说过,扫描行必须要是4的倍数,所以像素尺寸大小计算就是补零后的行像素数*高像素数(如果要计算文件大小还应该先乘位数,再加上信息头文件头,调色板),代码表示如下:

    DataSizePerLine = (biWidth*biBitCount+31)/8;//一个扫描行所占的字节数
    DataSizePerLine=DataSizePerLine/4*4;//字节数必须是4的倍数
    Datasize=DataSizePerLine*biHeight;//计算大小
    

    参考位图(bmp)文件格式分析

    展开全文
  • 在使用MATLAB处理图像的过程,保存文件的时候,常常不知道保存为哪种格式较为合适,因此,对不同格式的有一个简单的了解是必要的。MAT文件:mat数据格式是MATLAB的数据存储的标准格式,具有以下特点:可以在MATLAB...

    在使用MATLAB处理图像的过程中,保存文件的时候,常常不知道保存为哪种格式较为合适,因此,对不同格式的有一个简单的了解是必要的。

    MAT文件:

    mat数据格式是MATLAB的数据存储的标准格式,

    具有以下特点:

    可以在MATLAB中像M文件一样打开,数据进入workspace。

    可以调用MATLAB的子程序库,用C或fortan调用mat格式的数据。

    BMP文件:

    BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Bitmap,设备无关位图),是Windows系统中广泛使用的图像文件格式。

    由于它可以不作任何变换地保存图像像素域的数据,因此成为我们取得RAW数据的重要来源。

    Windows的图形用户界面(graphical user interface,GUI)也在它的内建子系统GDI中对BMP格式提供了支持。

    PNG文件:

    PNG是20世纪90年代中期开始开发的图像文件存储格式,其目的是企图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式,赌城“ping”。

    PNG文件用来存储灰度图像时,灰度图像的深度可多到16位;存储彩色图像时,彩色图像的深度可多到48位,并且还可以存储多到16位的α通道数据。

    PNG是从LZ77派生的无损数据压缩算法。

    PNG文件格式保留GIF文件格式的下列特性:

    使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。

    流式读/写性能(streamability):图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像。

    逐次逼近显示(progressive display):这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。

    透明性(transparency):这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。

    辅助信息(ancillary information):这个特性可用来在图像文件中存储一些文本注释信息。

    独立于计算机软硬件环境。

    使用无损压缩。

    PNG文件格式中要增加下列GIF文件格式所没有的特性:

    每个像素为48位的真彩色图像。

    每个像素为16位的灰度图像。

    可为灰度图和真彩色图添加α通道。

    添加图像的γ信息。

    使用循环冗余码(cyclic redundancy code,CRC)检测损害的文件。

    加快图像显示的逐次逼近显示方式。

    标准的读/写工具包。

    可在一个文件中存储多幅图像。

    进行J2ME的手机应用程序开发的时候,在图片的使用上,我们可以使用PNG格式的图片(甚至于在有的手机上,我们只可以使用PNG格式的图片),尽管使用图片可以为我们的应用程序增加不少亮点,然而,只支持PNG格式的图片却又限制了我们进一步发挥的可能性(其实,应该说是由于手机平台上的处理能力有限)。

    综上所示,mat、bmp、png均为无损的数据保存方式!

    Matlab中将文件保存为哪种格式比较合适呢?

    MATLAB图的保存分为两种,保存图形和保存图像。

    图像,就是我们所说的位图,如数码相机拍摄的照片;

    图形是矢量图,如3D软件绘制的图形。

    关于Matlab图形的保存方法的一点儿心得: 保存MATLAB图形,主要是为了插入word文档或者latex写报告或论文用。

    一、对于少量图形,可以只生产简单的图形,然后在fig图形编辑界面下进行手动编辑(加入各种label、字体线型的调整等),因为毕竟手动调整还是很方便的。

    保存图片的时候,我一般保存为.fig、.bmp、.tiff三种格式的文件,

    .fig格式 : 方便后续图形的修改

    .bmp和.tiff是插入文档和报告中用的。

    一般不用.jpeg格式,个人经验是这个.jpeg的图形不清晰,颜色也失真很多,插入文档不好看。

    再就是保存图片的时候,不要最大化之后保存,这样做后保存的图片插入文档中有些文字部分会显得小而且不清晰,最后是手动调整整个figure的大小至合适大小(所有文字图形都合适展示出来,不会有遮挡)。

    二、对于大量图形,就要结合get、set设置各种属性之后,再print保存图片。

    ——faruto按

    认识Matlab中三个图像保存函数

    1. imwrite

    imwrite将图像数据写成图像文件,一般用于图像处理。可以使用下面的方式将imshow显示在坐标系上的图像保存下来:

    >> I = getimage(gcf); %获取坐标系中的图像文件数据

    >> imwrite(I,'myphoto.jpg'); %保存图像为文件

    2. print

    print是打印命令,但是可以将当前坐标系中的内容打印到文件,或打印到剪切板,saveas只是print函数的简化版。

    print(fh,'-dmeta'); %复制到剪切板

    print的用法:

    print(图形句柄,存储格式,文件名);

    图形句柄,如果图形窗口标题栏为’figure2’,则句柄就是2。用gcf可以获取当前窗口句柄。

    指定存储格式,常用的有:

    PNG格式:’-dpng’(推荐这一种,与bmp格式一样清晰,文件也不大)

    JPEG格式:’-djpeg’(文件小,较清晰)

    TIFF格式:’-dtiff’

    BMP格式:’-dbitmap’(清晰,文件极大)

    GIF格式:’-dgif’(文件小但不清晰)

    经测试,同样一个图像文件数据,

    保存为BMP格式:

    文件大小为:162398 Bytes;分辨率为:433*370

    保存为PNG格式:

    文件大小为:29188 Bytes;分辨率为:433*370

    3. saveas

    saveas就是菜单中的save as(另存为)命令,将当前坐标系下的图形保存为图像文件,不管你坐标系中显示的是图像还是图形,一律被当作图形处理,它的本质是截图(除fig文件外)。

    Saveas(图形句柄,文件名,文件格式)

    文件格式:同print一样

    总结:

    1、 print:最常用

    可作为日常绘图的首选,对格式,分辨率等各项指标做了非常细致的定义,适合直接出图。

    2、 saveas:偶尔用

    虽然说保存的图像都是默认大小,无法更改,但关键是可以保存fig图像。

    saveas可以保存matlab自认的fig格式的图像,也就是说,对于将来有可能需要细致修改以方便发表论文的图像,保存为fig更适合。毕竟,有时候各期刊杂志对图像命名及色彩等要求不一,甚至我们绘图有时也会有这样那样的疏忽,而有的图像也不是一下就可以做出来的,保存fig图像用来最后细修很有意义。

    saveas(h,’filename’,’format’)

    如果只有一幅图,handle设为gcf;如果有多副,handle需单独设置

    例如:

    saveas(gcf, ‘D:\data\dif_model\output’, ‘fig’)

    saveas(gcf, ‘D:\data\dif_model\output’, ‘bmp’)

    3、 imwrite:不常用

    与getframe 结合使用,适合于保存截图,当机器运行速度变慢时,批量成图可能会有错误。

    它的优点在于可以为下一步做movie或gif动图做准备。

    matlab 保存画的图像时背景会自动就白色,怎么才能保存原来的颜色呢?

    其实可用print,不过先要改变图形的’inverthardcopy’属性

    例如:

    x=0:.2:2*pi;

    plot(x,sin(x));

    print d:\b1.bmp -dbmp

    set(gcf,’inverthardcopy’,’off’)

    print d:\b2.bmp -dbmp

    综述,用print指令将图像文件保存为png格式较为合适!

    参考链接:

    展开全文
  • 文件格式是在文件中存储信息的一种标准方法。首先,文件格式指定文件是一个二进制或ASCII文件。其次,文件展示了文件的组织形式。例如,逗号分隔值(CSV)文件格式存储在纯文本的表格数据。image.png2、为什么数据科学...
  • 图像写入图形文件

    2021-04-18 13:51:07
    A - 图像数据矩阵图像数据,指定为满(非稀疏)矩阵。...imwrite 不支持将 RGB 图像写入 GIF 文件。对于 TIFF 文件而言,A 可以是 m×n×4 数组,其中包含使用 CMYK 颜色空间的颜色数据。对于多帧 GIF 文件而言,...
  • DWG格式数据是AutoCAD图形文件,内部工作格式,以二进制方式存储,格式不开源。 DXF格式是AutoCAD(Drawing Exchange Format) 绘图交换文件,主要作用就是用于与其他软件进行数据交互。 对外交互,说明格式标准稳定...
  • 文章编号:0494-0911( 2011) 09-0077-03 中图分类号: P208 文献标识码: B Matlab 图形数据转换为 DXF 格式的方法研究 秦 永1,2,付仲良1 ( 1. 山东理工大学 建筑工程学院,山东 淄博 255000; 2. 武汉大学 遥感信息...
  • 常见的文件格式有哪些

    千次阅读 2021-01-09 08:54:49
    A AAC:MPGE-4高级音频编码 ACC:苹果设备的专属音乐格式 ...APK:AndroidPackage /Android(安卓)安装包,APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机执行即可安装 APS
  • 本文实例讲述了Python实现读取txt文件中的数据并绘制出图形操作。分享给大家供大家参考,具体如下:下面的是某一文本文件中的数据。6.1101,17.5925.5277,9.13028.5186,13.6627.0032,11.8545.8598,6.82338.3829,11....
  • 因为DICOM图像通常是一个序列,普通的dcm格式图像序列可以直接使用DICOM图像查看软件打开进行查看;但mhd格式的3D图像却无法方便地查看。但为了研究方便,可视化mhd图像文件是绕不开的一项任务。 具体来说,在...
  • 下面我们先了解一下几种格式的比较正式的解释(注:以下内容源自百度知道):GIF意为GraphicsInterchangeformat(图形交换格式),GIF图片的扩展名是gif。现在所有的图形浏览器都支持GIF格式,而且有的图形浏览器只认识...
  • 1. Without GUI1.1 diffdiff能够比较2个文件夹git语法:diff [选项] file1 file2说明:该命令告诉用户,...若是file1或file2是目录,那么diff将使用该目录的同名文件进行比较。例如: diff /usr/xu mine选项的含义...
  • 如果文件中同时存在数据属性和几何/拓扑部分,则数据属性部分中定义的数据值数量必须与几何/拓扑部分中定义的点或单元数量完全匹配。 单元格类型cell type和索引indices 类型为int型。 二进制数据必须放在文件中,...
  • 使用Matlab将多个图形Figure文件合并

    千次阅读 2021-09-12 17:43:57
    0. 原由Matlab使用过程,会遇到需要将多个图形Figure文件合并成一个文件的需求,便于在一个坐标轴内对曲线进行合并的显示和比较。如下图:分别使用P控制、PID控制、模糊PID控制、神经网络PID控制方法,得到了某...
  • 计算机图形图像处理试题(A)班级_____________姓名____________ 学号_________________一、选择(每小题2分,共30分)1、下列哪个文件不属于位图图形文件格式________。A 、PSDB 、TIFFC 、DWGD 、BMP2._______图层上的...
  • Windows操作系统使用最多的图形文件格式就是位图格式,最常见的位图文件的扩展名为BMP。BMP是英文Bitmap(位图)的简写,这种格式的特点是包含的图像信息丰富,几乎不进行压缩,因此它占用的磁盘空间较大。下面主要...
  • svg格式图像可任意放大图形显示,而且边缘异常清晰,生成的文件很小,方便传输,文字在svg图像中保留可编辑和可搜寻的状态,没有字体的限制,所以十分适合用于设计高分辨率的Web图形页面。svg是什么文件?svg是...
  • 目录PNG图像结构分析一、PNG图像格式介绍1、概述2、PNG图像特性二、PNG图像格式介绍1、文件结构构成(1)文件署名域(2)数据块(一)关键数据块① IHDR(Image Header chunk,文件头数据块)② PLTE(Palette chunk...
  • TGA是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形图像工业所接受。现已成为数字化图像,以及运用光线跟踪算法所产生的高质量图像的常用格式。TGA文件的扩展名为.tga,该格式支持压缩...
  • 图像处理基础知识——图片存储形式、色域、图片文件格式 1.图片存储形式 对于任意一幕我们人眼看到的图像,在用相机镜头拍摄下来后,他就不再是我们人眼见到的图像了,而是在计算机内部的处理下形成了一个矩阵,一整...
  • Coreldraw和Photoshop长期以来一直是PC上常用的的著名设计软件,是专业设计用户的首选,二者在图形图像的处理... 这就涉及到怎样将Coreldraw图形图像正确输出到Photoshop,以及哪种方法更好的问题。用Cor...
  • 流式网络图形格式(Portable Network Graphic Format,PNG)名称来源于非官方的“PNG’s Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色...
  • 例如,在“expenses.xlsx”,文件名的第一部分是“expenses”,扩展名为“xlsx”。扩展名告诉计算机哪个创建的应用程序或者哪个其他程序可以打开该文件以及用于该文件的图标。 例如,“docx”扩展名告诉计算机 ...
  • BMP图像数据格式详解

    2021-07-22 10:34:17
    BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP图文件格式与显示...
  • (setq lyname (cdr(assoc 8 (entget (car (entsel)))))) that's it!, What else d(setq lyname (cdr(assoc 8 (entget (car (entsel)...绘图过程经常会碰到这种情况:某个图层已被“清空”,但却无法将其删除,究竟...
  • 欢迎到我的简书查看我的文集前言:GUI是图形用户界面,在Java,图形用户界面我们用GUI表示,而GUI的完整英文为: Graphical User Interface(图形用户接口), 所谓图形用户界面就是以图形的方式来显示你计算机的操作界面,...
  • 是在/var/ftp/pub注意:这里还需要配置,比如不允许匿名上传需要改etc/vsftpd/user_list,下面是一些被禁止访问的用户和访问etc/vsftpd/ftduser下面是一些允许访问的1.ftpusers文件位于/etc/vsftpd目...
  • 一、如何获取 res 的资源数据包package:android.content.res主要类:Resources其主要接口按照功能,划分为以下三部分:getXXXX()例如:int getColor(int id)Drawable getDrawable(int id)String getString(int id...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,781
精华内容 32,312
关键字:

下面的图形图像文件格式中