簡體   English   中英

在WP7上不斷更改圖像的最佳性能方法是什么?

[英]What's best performance way to constantly change image on WP7?

我正在嘗試為WP7制作自己的類型的遠程桌面。 我有一個WCF服務,該服務會在目標計算機的屏幕上返回圖像。

這是WCF服務器代碼:

    // Method to load desktop image
Bitmap image = new Bitmap( ViewSize.Width, ViewSize.Height );
Graphics g = Graphics.FromImage( image );

g.CopyFromScreen( Position.X, Position.Y, 0, 0, ViewSize );

g.Dispose( );
return image;

// Convert image to byte[] which is returned to client
using ( MemoryStream ms = new MemoryStream( ) )
{
    Bitmap image = screenGrabber.LoadScreenImage( );
    image.Save( ms, ImageFormat.Jpeg );
    imageArray = ms.ToArray( );
}

這是WP7客戶端的代碼:

    MemoryStream stream = new MemoryStream( data );
BitmapImage image = new BitmapImage( );

image.SetSource( stream );
BackgroundImage.Source = image;

BackgroundImage變量是一個Image控件。

我注意到不久后在模擬器上凍結,最終將因OutOfMemoryException崩潰。 這已經很慢了(圖像比屏幕上的顯示晚了半秒鍾),我想知道是否有更好/更快的方法? 任何幫助都會很棒。 提前致謝。

我想我可以闡明您的OutOfMemoryException。 您是否知道IDisposable接口? MemoryStream類型是IDisposable,因此必須在其上調用Dispose以確保已對其進行垃圾回收並釋放了其擁有的所有資源。 您的代碼應如下所示:

using(MemoryStream stream = new MemoryStream( data ))
{
  BitmapImage image = new BitmapImage( );
  image.SetSource( stream );
}

關於性能,真正的遠程桌面(RDP)應用程序不會在每次更改時發送整個屏幕圖像,而是發送部分更新以最大程度地減少帶寬使用。

如果每次都要進行全屏刷新,請確保已適當縮放和壓縮它。

ColinE是正確的,但有細微差別。 如果使用他的代碼,將其設置為源后,它將自動處理該圖像。 結果可能是錯誤,表明您已嘗試從非UI線程更新UI,或者在嘗試可視化已准備就緒的位圖時導致問題。

相反,我會選擇保留對當前圖像的引用,然后更改圖像,然后使用對先前的當前圖像的引用來處置該圖像。 沒有訪問IDE atm的權限,而是訪問其他東西的權限(假設代碼在UI線程中運行,否則,您還必須確保代碼在此處被喚醒)。

MemoryStream流=新的MemoryStream(data); BitmapImage圖片=新的BitmapImage();
image.SetSource(stream);

IDisposable toDispose =(IDisposable)BackgroundImage.Source;

BackgroundImage.Source =圖片;

toDispose.Dispose();

另外,如果您不想重蹈覆轍,請查看VNC, VNC#是它的庫,它使您可以合理地了解其他人之前如何進行桌面遠程處理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM