[英]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.