求助真彩色显示!!已google过,该论坛精华区也搜过了,自己也试过了。
本来理解24位真彩是3个字节代表一个象素,故每读三个字节然后连续写屏就应该是正确的。但实际操作后发现颜色变为黑白,图像轮廓只有最左边的1/4连续重复。
我所设置显示模式是vesa 0112h,所用写点函数如下:
#define SCANLENG 640
#define G_SEGMENT 0A000H
void truecolor_putpixel(int x,int y,unsigned char color)
{
int scanleng = SCANLENG*3 ;
int cur_page = CUR_PAGE ;
unsigned char color1,color2;
color1 = *((&color)+1);
color2 = *((&color)+2);
x *= 3;
asm{
mov ax,y
mul scanleng
add ax,x
jnc jemp1
inc dx
}
jemp1:
asm{
mov di,ax
cmp dx,cur_page
je jemp2
}
select_page(_DX);
jemp2:
asm{
mov ax,G_SEGMENT
mov es,ax
mov al,color
mov es:[di],al
inc di
mov al,color1
mov es:[di],al
inc di
mov al,color2
mov es:[di],al
}
}
void select_page(int page)
{
asm{
mov bx,0
mov dx,page
mov ax,4f05h
int 10h
}
CUR_PAGE = page;
}
求操作过的高手指教,我的问题在哪儿?真彩色到底如何直接写屏,如果是32位最高位如何处理?