如何产生一个BMP文件

时间:2005-12-20 来源: 作者: 点击:
概述: BMP 文件是一种常用的图像文件格式,本文的例子程序产生一个简单的 640x480 24 bit 颜色的 BMP 文件。BMP 文件的格式分两部分,第一部分为文件头,具体定义见源程序,第二部分为数据区,紧接着文件头存放。 源程序: code segment assume cs:code,ds:code org 10
  概述:

     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	?		;reservedD_OFFSET	DD	36h		;数据区开始位置D_BISIZE	DD	28h		;bit map info' head lengthD_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 usedD_CLRIMP	DD	0		;important color indexBMP_HEAD_END	EQU	THIS BYTE;----------------------------------------------------------------
HANDLE		DW	?FILE_NAME	DB	'test.bmp',0LINE_BUF	DB	640*3 dup (0)D_RED		DB	0ffhD_GREEN		DB	0D_BLUE		DB	0
install:		mov	ah,3ch		;建立文件		xor	cx,cx		mov	dx,offset file_name		int	21h		jnb	cre_ok		int	20hcre_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,bpb_lop:		push	cx		          
		mov	ax,bp		inc	bp		cmp	ax,160		jb	b1		cmp	ax,320		jb	b2b3:		sub	ax,320		mov	si,offset d_blue		mov	di,offset d_red		jmp	short b4b2:		sub	ax,160		mov	si,offset d_green		mov	di,offset d_blue		jmp	short b4b1:		mov	si,offset d_red		mov	di,offset d_greenb4:		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		cldb_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

------分隔线----------------------------
顶一下
(0)
0%
踩一下
(2)
100%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容