如何用软件方法倒置屏幕??(100分)

  • 主题发起人 主题发起人 cequal
  • 开始时间 开始时间
C

cequal

Unregistered / Unconfirmed
GUEST, unregistred user!
我希望可以通过软件的方法上下,或者左右倒置屏幕和鼠标的显示,效果就好像将屏幕倒过来一样,
但是,我可以通过软件的方法控制。
不知个唯有没有什么意见?
 
很简单啊,把屏幕抓下来,自己处理一下scanlines就行了
如果你是要把桌面倒过来操作,那抱歉,难度太大
 
把显示器抓起来,旋转180度,放下。难度就是要点力气。
要软方法。什么,手是软的啊。手就是软件啊。
(开个玩笑)[:)]
 
看一下flip virus code
 
我向大家误会我的意思了。
我希望实时转换,不是针对某一个时刻。
例如,可以做到,但前屏幕上放映动画,每一幅图的显示都自动变成倒置的。
 
显示器倒过来是最有效的方法,不用编程,
移植性好,实时性高,错误率低,不用培训
操作员,维护简单。
 
to cequal:
其实就是屏幕图象的反置问题!
给你编了个小程序,你参考一下。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ScrollBox1: TScrollBox;
Image1: TImage;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
DeskCanvas :TCanvas;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Bmp :TBitmap;
DeskDC :HDC;
begin
DeskDC :=GetDC(0);
DeskCanvas :=TCanvas.Create;
DeskCanvas.Handle :=DeskDC;
Bmp :=TBitmap.Create;
Bmp.PixelFormat :=pf24Bit;
Bmp.Width :=Screen.Width;
Bmp.Height :=Screen.Height;
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,DeskCanvas.Handle,0,0,SRCCOPY);
Image1.Picture.Bitmap.Assign(Bmp);
Bmp.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Bmp1,Bmp2 :TBitmap;
I,J :Integer;
p1,p2 :PByteArray;
begin
Bmp1 :=TBitmap.Create;
Bmp1.PixelFormat :=pf24Bit;
Bmp1.Assign(Image1.Picture.Bitmap);
Bmp2 :=TBitmap.Create;
Bmp2.PixelFormat :=pf24Bit;
Bmp2.Assign(Bmp1);
for J :=0 to Bmp1.Height-1 do
begin
p1 :=Bmp1.ScanLine[J];
p2 :=Bmp2.ScanLine[Bmp1.Height-1-J];
for I :=0 to Bmp1.Width-1 do
begin
p2[3*I+2] :=p1[3*I+2];
p2[3*I+1] :=p1[3*I+1];
p2[3*I] :=p1[3*I];
end;
end;
Image1.Picture.Bitmap.Assign(Bmp2);
Bmp1.Free;
Bmp2.Free;
end;

end.
 
屏幕上放映动画,每一幅图的显示都自动变成倒置的,
你可以在TIMER事件里加入上面的代码!
只需要设置时间间隔就可以了。
 
tinytao, 高。
 
卷起千堆雪tyn是高手了.
不过BitBlt的操作太耗时间和资源,cequal所说的放映动画的要求肯定是答不到的了.
有什么好办法?
 
用DX来做会好一些,我一个朋友作过类似的冬冬,你可以检索以下他的帖子,xwings
 
其实我希望最好能够在windows的底层WM_Paint消息
修改显示的命令,将所有的显示修改位置或者倒置,
但是这样不能使得Mouse的消息跟着改变。

我希望最终的效果是:就像显示器倒置,所有的显示和Mouse的位置
都很正常。

我的要求并不是修改某一刻,或者间隔某段时间后取得图像的倒置。

我在想,是否Windows有提供某些简单的借口,可以比较简单地实现。
 
我好像在哪里看到过类似的软件。帮你查查。
 
实时转换是不太好做,我觉得应该从VXD着手
 
用透镜成像啊,最省力吧:)
(:玩笑^_^玩笑:)
 
我看就用老千的吧!抓图。
 
caowei说得对
从vxd入手,应该基本上,可以做到实时
用windows的gdi太慢了
 
GF4-MX440有这个功能,试了一下,好变态[:D]
 
随时改变显示点阵,用类似TYN的方法,截获鼠标事件,改变鼠标位置后还给系统
 
后退
顶部