Posted By: Remon | Sep 22nd, 2007 @ 10:36 PM
page 1 of 1
Comments: 5 | Views: 1052

Hi, I am doing a simple RDP client/server.

For know i am able to use WIN APIs to Capture the Desktop screen. However, the Desktop screen size is large (400KB) as i have a hight res Desktop.

Anyone know an idea/algorithm to enhance image transfer ?

I have tried XNOR/AND method but it didn't work as the CaptureDesktop returns a different image everytime i use it, even if i haven't changed anything in the screen.

I'd be grateful if someone have info about how MS RDP is working for these snapshot transfer.

Thanks!

eddwo
eddwo
Wheres my head at?
AFAIK RDP doesn't work like that. It doesn't transfer a bitmap of the whole screen, but instead hooks into the window manager at the GDI command level.

So if a program on the server calls the DrawLine function, the TS redirector captures that function call and its parameters, encodes them into the network stream and sends them to the client. The client decodes the paremeters and calls the same DrawLine function on the client device context to create the image the program on the server is rendering.

Obviously its a lot more complex than that for other cases, and some bitmap images like the desktop background do need to be transferred over the wire, but it uses a tiling mechanism to break the images into small sections, which are also cached on the client so they don't need to be transferred all the time.

Specs of the protocol from which RDP has been extended.

VNC works more like you imagine, it works at the bitmap level, but it uses several techniques to minimize the amount of transfer required. It again tiles the desktop image, so it only need to transfer the contents of tiles that have been changed, compresses the bitmaps, and does not usually include the cursor in the bitmaps, so simply moving the mouse around does not generally require lots of new tiles to be sent unless it changes the state of the image in other ways such as roll-over effects.
W3bbo
W3bbo
The Master of Baiters
eddwo wrote:
AFAIK RDP doesn't work like that. It doesn't transfer a bitmap of the whole screen, but instead hooks into the window manager at the GDI command level.


The display portion of RDP is implemented as a display driver for Windows. So I don't think it can intercept it at the per-function call level (like networked X-Windows), but it can still work off a lot of fundamental display stuff.
eddwo
eddwo
Wheres my head at?
Ok, so it probably hooks into the actual graphics drawing at the "DrvStrokePath" level, but there is also a lot of Window position/state/activation information transmitted through the protocol so the terminal services server must be fairly tightly coupled with the window manager itself.
DominatorLegend
DominatorLegend
Frosted Core
Hi,

Use XOR to get the difference between two images, the reference and newly captured image.

http://www.codersource.net/csharp_image_processing_xor.aspx
jh71283
jh71283
Throw new System.Beverage. OutOfCoffeeException​()
And also drop the color depth...
page 1 of 1
Comments: 5 | Views: 1052