[asm:code] CreateBmpImage.asm

来源(null)

[asm:code] CreateBmpImage.asm

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 BAP 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     20
cre_ok:
    mov     handle,ax

    mov     ax,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

Link: http://www.asm32.net/article_details.aspx?id=55


浏览次数 686 发布时间 2002/4/15 20:37:30 从属分类 ASM/ASM32 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | Python | 书签 | ASP.Net书签 | 京ICP备09029108号-1