WEB开发网
开发学院网络安全黑客技术 如何产生一个BMP文件 阅读

如何产生一个BMP文件

 2007-01-13 20:13:38 来源:WEB开发网   
核心提示:概述: BMP 文件是一种常用的图像文件格式,本文的例子程序产生一个简单的 640x480 24 bit 颜色的 BMP 文件,如何产生一个BMP文件,BMP 文件的格式分两部分,第一部分为文件头,具体定义见源程序,第二部分为数据区

概述:

BMP 文件是一种常用的图像文件格式,本文的例子程序产生一个简单的 640x480 24 bit 颜色的 BMP 文件。BMP 文件的格式分两部分,第一部分为文件头,具体定义见源程序,第二部分为数据区,紧接着文件头存放。

源程序:

  code segment
  assume cs:code,ds:code
  org 100h
  start:
  jmp install;BMP 文件头定义
;---------------------------------------------------------------
BMP_HEAD  DB  'BM'    ;固定为 'BM'
D_FILE_LENGTH  DD  640*480*3+36h  ;文件总长度,包括文件头
D_RESERVED  DD  ?    ;reserved
D_OFFSET  DD  36h    ;数据区开始位置
D_BISIZE  DD  28h    ;bit map info' head length
D_WIDTH    DD  640    ;图形的宽度(单位象素)
D_HEIGHT  DD  480    ;图形的高度(单位象素)
D_PLANES  DW  1    ;图形的平面数
D_BIT    DW  24    ;颜色位数
D_COMPRESS  DD  0    ;压缩方式(0为不压缩)
D_SIZE    DD  640*480*3  ;数据长度
D_XPPM    DD  0c00h    ;pixels per meter (x)
D_YPPM    DD  0c00h    ;pixels per meter (y)
D_CLRUSED  DD  0    ;color used
D_CLRIMP  DD  0    ;important color index
BMP_HEAD_END  EQU  THIS BYTE
;----------------------------------------------------------------
HANDLE    DW  ?
FILE_NAME  DB  'test.bmp',0
LINE_BUF  DB  640*3 dup (0)
D_RED    DB  0ffh
D_GREEN    DB  0
D_BLUE    DB  0
install:
    mov  ah,3ch    ;建立文件
    xor  cx,cx
    mov  dx,offset file_name
    int  21h
    jnb  cre_ok
    int  20h
cre_ok:
    mov  handle,ax
         
    mov  ah,40h    ;写入文件头
    mov  bx,handle
    mov  cx,offset bmp_head_end-offset bmp_head
    mov  dx,offset bmp_head
    int  21h
         
    mov  cx,480    ;写入 480 行数据
    xor  bp,bp
b_lop:
    push  cx
         
    mov  ax,bp
    inc  bp
    cmp  ax,160
    jb  b1
    cmp  ax,320
    jb  b2
b3:
    sub  ax,320
    mov  si,offset d_blue
    mov  di,offset d_red
    jmp  short b4
b2:
    sub  ax,160
    mov  si,offset d_green
    mov  di,offset d_blue
    jmp  short b4
b1:
    mov  si,offset d_red
    mov  di,offset d_green
b4:
    mov  cx,0ffh
    mul  cx
    mov  cx,160    ;160
    div  cx
         
    mov  byte ptr ds:[si],0ffh
    sub  byte ptr ds:[si],al
    mov  byte ptr ds:[di],al
         
    mov  cx,640
    mov  di,offset line_buf
    cld
b_lop1:
    mov  al,d_red
    stosb
    mov  al,d_green
    stosb
    mov  al,d_blue
    stosb
    loop  b_lop1
         
    mov  ah,40h
    mov  bx,handle
    mov  cx,640*3
    mov  dx,offset line_buf
    int  21h
    pop  cx
    loop  b_lop
         
    mov  ah,3eh    ;关闭文件
    int  21h
    int  20h
CODE    ENDS
    END  START

Tags:如何 产生 一个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接