求助真彩色显示!!已google过,该论坛精华区也搜过了,自己也试过了。

fancy0001 2004-01-02 05:18:44
本来理解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位最高位如何处理?
...全文
35 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fancy0001 2004-01-02
  • 打赏
  • 举报
回复
谢谢,可以理解,继续求教前一个问题!
Areslee 2004-01-02
  • 打赏
  • 举报
回复
现在的真彩色模式为了提高访问速度都使用4个字节来表示一个象素
前3全字节分别代表红绿蓝,最后一个字节为0
fancy0001 2004-01-02
  • 打赏
  • 举报
回复
appreciate
csdsjkk 2004-01-02
  • 打赏
  • 举报
回复
x *= 3;
改为:
x *= 4;
fancy0001 2004-01-02
  • 打赏
  • 举报
回复
up

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧