怎样旋转屏幕显示?望高人指点(100分)

  • 主题发起人 主题发起人 zleo
  • 开始时间 开始时间
Z

zleo

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样将屏幕输出旋转90度,也就是将屏幕竖着看的效果,
我觉得要修改显示驱动,在中间加一层转换,望高人指点
如提供代码,给分一千!
 
恩....可以用访问显示器物理地址的方法实现.
找到你显示器物理位置.然后在此位置将显示器倒过来就可以了
很简单的.
呵呵呵呵 不会是做着弄人的软件吧.
 
火龙真人:
弄人软件不用这么麻烦阿,确实急需
 
nvidia的显卡驱动有这个功能
 
gxcooo:
谢谢,但不知道它大概是怎么实现的。
我下了个软件pivotpro可以实现我想要的功能,它也是做了驱动,
但这个驱动大概怎么实现,能给个意见吗???
 
直接修改显存,要么利用显卡驱动提供的接口
 
爱元元的哥哥:
我也有类似的想法,能具体些吗
 
我在纯DOS下写过显存,不难,首先设置分辨率,然后写颜色寄存器,建调色板,最后直接
写数据,DOS下显存是分页的,必须不断的算是否要换页。下面是我写的代码,供参考。

设置分辨率的代码
void set_mode ( int m )
{ union REGS i, o ;
i.x.ax = 0x4f02 ;
i.x.bx = m ;
int86 ( 16, &i, &o ) ;
}

换页代码
void set_page ( int bank_number ) /* change the current page to Blank_number */
{ union REGS i, o ;
i.x.ax = 0x4F05 ;
i.x.bx = 0 ;
i.x.dx = bank_number ;
int86 ( 16, &i, &o ) ;
}

画点代码
void put_256pixel( int x, int y, unsigned char color )
{
static unsigned short curr_vesa_seg = 0xffff ;
unsigned short vesa_seg,vesa_offset ;
unsigned long seg_size = 0xffff + 1L ;
unsigned long offset ;
offset = ( ( unsigned long ) y * ( unsigned long ) 800 + ( unsigned long ) x ) ;
vesa_seg = offset / seg_size ;
vesa_offset = offset % seg_size ;
if ( vesa_seg != curr_vesa_seg )
{ set_page ( vesa_seg ) ;
curr_vesa_seg = vesa_seg ;
}
pokeb ( 0xa000, ( unsigned ) vesa_offset, color ) ;
}

 
好话题,关注,有没有汇编代码?
 
用DX可以吧,取得内存地址,然后自己算法倒转,再flip出来
 
爱元元的哥哥
谢谢,在windows下写显存必须在0级,可能差别比较大,能不能提供windows下的示例

我试用了一下pivotpro,它好像是在显卡可用显示模式中加了一个768*1024的,
当转换到这个模式后,就它的驱动就对windows的所有显示做一个变换,
再调用原来的显卡驱动输出
 
有一个笨办法
就是把要显示的东东考下(考屏)
然后,用BltBit这个GDI函数,将它旋一下就....
 
zxbyh:
这样做不到实时阿
 
接受答案了.
 
后退
顶部