您的位置:IT教程网首页>操作系统教程>dos>DOS下看真彩BMP位图的小程序

DOS下看真彩BMP位图的小程序


}
else
{
while(xlt;right_x)
{
Pixel24TrC(color,x,y);
if((right_x-left_x)gt;(right_y-left_y))
while((right_y-left_y)*(x-left_x)lt;(right_x-left_x)*(y-left_y))
{
x ;
Pixel24TrC(color,x,y);
}

x ;

if(ygt;=right_y)
continue;
if((right_y-left_y)gt;(right_x-left_x))
while((right_y-left_y)*(x-left_x)gt;(right_x-left_x)*(y-left_y))
{
y ;
Pixel24TrC(color,x,y);
}
y ;
};

while(ylt;=right_y)
{
Pixel24TrC(color,x,y);
y ;
};
}

return0;
}


[/code:1:9253783525]


a.h头文件

[code:1:9253783525]
#defineLINE640


#defineC256(R,G,B)(uignedchar)R*0x20%0x100 (uignedchar)G*0x4%0x20 B

#defineHi15(R,G,B)(uigned)R*0x400%0x8000 (uigned)G*0x20%0x400 (char)B%0x20

#defineHiC(R,G,B)(uigned)R*0x800%0x10000 (uigned)G*32%0x800 (char)B%0x20
#defineTrC(R,G,B)(uignedlong)R*0x10000%0x1000000 (uignedlong)G*0x100%0x10000 (uigned)B%0x100
#defineHi-TrC(RGB)(uignedlong)RGB%0x10000/2048*65536 (uignedlong)RGB 48/32*256 (uignedchar)RGB2
#defineTr-HiC(RGB)(uignedlong)RGB%0x1000000/655362*2048 (uignedlong)RGBe536/64*32 (uignedchar)(RGB2)


#defineC256_640_4000x100
#defineC256_640_4800x101
#defineC16_800_6000x102
#defineC256_800_6000x103
#defineC16_1024_7680x104
#defineC256_1024_7680x105
#defineHi15_640_4800x110
#defineHi640_4800x111
#defineTr640_4800x112
#defineHi15_800_6000x113
#defineHi800_6000x114
#defineTr800_6000x115
#defineHi15_1024_7680x116
#defineHi1024_7680x117
#defineTr1024_7680x118




externvoidDemo(uignedlong,int,int);

externvoidinit(int);
externvoidPixel16HiC(int,int,int);
externvoidPixel24TrC(uignedlong,int,int);
externvoidPixel256C(char,int,int);
externvoidline(uignedlongx1,uignedlongy1,uignedlongx2,uignedlongy2,uignedlongcolor);

/*seepic*/
externuignedfar*readpic(FILE*fp);

externvoidmouse(void);




st


您正在看的DOS教程是:DOS下看真彩BMP位图的小程序。ructbmp_head
{
intother1;
uignedlonglength;
charother2[4];
uignedintoffset;
charother3[6];
uignedintwidth;
charother4[2];
uignedinthight;
charother5[4];
uignedcharcolor;
};
[/code:1:9253783525]


mybmp.c这是嵌入式汇编的画点函数
[code:1:9253783525]
voidinit(intmode)
{
asmmovbx,mode
asmmovax,4f02h
asmint10h
retur
}




voidPixel24TrC(uignedlongcolor,intx,inty)
{

asmpushes
asmpushdi

asmmovax,4f03h
asmint10h

pi112:
asmcmpbx,112h
asmjnzpi115

asmmovdx,640
asmjmpwrite_24t


pi115:
asmcmpbx,115h
asmjnzpi118

asmmovdx,800
asmjmpwrite_24t

pi118:
asmcmpbx,118h
asmjnzTr_exit

asmmovdx,1024

write_24t:
asmmovax,0a000h
asmmoves,ax
asmmovax,y
asmmuldx
asmmovbx,ax
asmmovcx,dx
asmaddax,bx
asmadcdx,cx
asmaddax,bx
asmadcdx,cx
asmaddax,bx
asmadcdx,cx

asmmovbx,x
asmaddbx,x
asmaddbx,x
asmaddbx,x
asmaddax,bx
asmadcdx,0
asmmovdi,ax

asmmovax,4f05h
asmmovbx,0
asmint10h

asmmovcx,wordptrcolor
asmmovwordptres:[di],cx
asmadddi,2
asmmovcx,wordptrcolor 2
asmmovwordptres:[di],cx

Tr_exit:
asmpopdi
asmpopes

retur
}




voidPixel16HiC(intcolor,intx,inty)
{
asmpushes
asmpushdi

asmmovax,4f03h
asmint10h

pi110:
asmcmpbx,110h
asmjnzpi111

asmmovdx,640
asmjmpwrite_16h



pi111:
asmcmpbx,111h
asmjnzpi113

asmmovdx,640
asmjmpwrite_16h



pi113:
asmcmpbx,113h
asmjnzpi114

asmmovdx,800
asmjmpwrite_16h


pi114:
asmcmpbx,114h
asmjnzpi116

asmmovdx,800
asmjmpwrite_16h


pi116:
asmcmpbx,116h
asmjnzpi117

asmmovdx,1024
asmjmpwrite_16h


pi117:
asmcmpbx,117h
asmjnzHi_exit

asmmovdx,1024


write_16h:
asmmovax,0a000h
asmmoves,ax
asmmovax,wordptr[y]
asmmuldx
asmshlax,1
asmjca1
asmshldx,1
asmjmpcont
a1:
asmshldx,1
asmincdx

cont:
asmshlwordptr[x],1
asmaddax,wordptr[x]
asmadcdx,0
asmmovdi,ax

asmmovax,4f05h
asmmovbx,0
asmint10h

asmmovcx,wordptr[color]
asmmovwordptres:[di],cx

Hi_exit:
asmpopdi
asmpopes

retur
}


voidPixel256C(charcolor,intx,inty)
{
asmpushes
asmpushdi


asmmovax,4f03h