DOS下显示8位256色BMP位图

本文详细介绍了DOS下如何解析8位256色BMP位图文件,包括BMP文件头、位图信息头的结构和内容,以及颜色索引表和位图数据的存储方式。通过理解这些内容,可以实现DOS环境下显示BMP图片。
摘要由CSDN通过智能技术生成

 

#include<stdio.h>
#include<stdlib.h>	//exit()
#include<dos.h>		//in86()
#include<bios.h>	//close()
#include<fcntl.h>	//open()
#include<io.h>		//lseek(),read()

#include<conio.h>	//outp(),getch()

#define VGA256 					0x13	//320*200 256色 显示模式
#define TEXT_MODE 				0x03	//80×25   16 色 文本模式

#define SCREEN_HEIGHT			200		//图象高度,像素单位
#define SCREEN_WIDTH 			320		//图象宽度,像素单位

#define PALETTE_MASK 			0x3c6	//调色板屏蔽寄存器端口,放入0xff可以通过调色板索引寄存器0x3c7和0x3c8访问你希望的寄存器
#define PALETTE_REGISTER_RD 	0x3c7	//读颜色寄存器端口
#define PALETTE_REGISTER_WR 	0x3c8	//写颜色寄存器端口
#define PALETTE_DATA 			0x3c9	//调色板数据寄存器端口

unsigned char far *video_buffer=(char far *)0xA0000000L;

typedef struct BMP_file
{
	unsigned int bfType;			//这里恒定等于0x4D42,ASCII字符‘BM’
	unsigned long bfSize;			//文件大小,以字节为单位
	unsigned int Reserved1;			//备用,必须为0
	unsigned int reserved2;			//备用,必须为0
	unsigned long bfOffset;			//数据区在文件中的位置偏移量,以字节为单位
}bitmapfile;						//文件头结构体,14 字节

typedef struct BMP_info
{
	unsigned long biSize;			//位图信息头大小,本结构所占用字节数
	unsigned long biWidth;			//图象宽度,像素单位
	unsigned long biHeight;			//图象高度,像素单位
	unsigned int biPlanes;			//位平面树,目标设备的级别,必须为1
	unsigned int biBitCount;		//单位像素的位数,表示BMP图片的颜色位数,必须是1(双色 ),4(16色),8(256色),24位图(真彩色),32位图
	unsigned long biCompression;	//图片压缩属性,必须为:0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
	unsigned long biSizeImage;		//表示图片数据区的大小,当biBompression等于0时,这里的值可以省略
	unsigned long biXpolsPerMeter;	//水平分辨率,每米像素数,可省略
	unsigned long biYpelsPerMeter;	//垂直分辨率,每米像素数,可省略
	unsigned long biClrUsed;		//表示使用了多少个颜色索引表,一般biBitCount属性小于16才会用到,等于0时表示有2^biBitCount个颜色索引表
	unsigned long biClrImportant;	//表示有多少个重要的颜色,等于0时表示所有颜色都很重要
}bitmapinfo;						//位图信息头,40 字节


typedef struct RGB_BMP_typ
{
	unsigned char blue;				//蓝色的亮度(值范围为0-255)
	unsigned char green;			//绿色的亮度(值范围为0-255)
	unsigned char red;				//红色的亮度(值范围为0-255)
	unsigned char reserved;			//保留,必须为0
}RGB_BMP,*RGB_BMP_ptr;				//单个像素颜色结构体,4 字节

typedef struct bmp_picture_typ
{
	bitmapfile file;				//位图文件头
	bitmapinfo info;				//位图信息头
	RGB_BMP palette[256];			//位图颜色表
} bmp_picture, *bmp_picture_ptr;	//位图非数据区结构体

void Set_BMP_Palette_Register(int index,RGB_BMP_ptr color)		//设置调色板寄存器……
{
	outp(PALETTE_MASK,0xff);
	outp(PALETTE_REGISTER_WR,ind
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值