1

リモートデスクトップ風のプログラムを作成しようとしていますが、現在、リモートPCにあるもののイメージを取得し、それをクライアントPCに返送してイメージを更新しようとしています(これは2〜3秒ごとに発生します)。 )。

私は現在、次のようなデスクトップの画像を取得しています。

// Set up a bitmap of the correct size
        Bitmap CapturedImage = new Bitmap((int)SystemInformation.VirtualScreen.Width,
            (int)SystemInformation.VirtualScreen.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb565);

        // Create a graphics object from it
        System.Drawing.Size size = new System.Drawing.Size((int)SystemInformation.VirtualScreen.Width, (int)SystemInformation.VirtualScreen.Height);

        using (Graphics gr = Graphics.FromImage(CapturedImage))
        {
            // copy the entire screen to the bitmap
            gr.CopyFromScreen(0, 0, 0, 0,
                size, CopyPixelOperation.SourceCopy);
        }

        EncodeToJPEG(CapturedImage);

また、EncodeToJPEGは次のようになります。

var qualityEncoder = Encoder.Quality;
        var quality = (long)0;
        var ratio = new EncoderParameter(qualityEncoder, quality );
        var codecParams = new EncoderParameters(1);
        codecParams.Param[0] = ratio;
        var jpegCodecInfo = GetEncoder(ImageFormat.Jpeg);
        capturedImage.Save(@"c:\Test.jpg", jpegCodecInfo, codecParams); // Save to JPG

私の質問はSaveメソッドから来ています。このJPGをファイルに保存するのではなく、ネットワーク経由で送り返すのに十分な時間だけ一時的に保存する方法があるのではないかと思っていました。同様に、圧縮されたJPGであるImageオブジェクトを返すことはできますか?それとも、これはこの方法では不可能ですか?

また、これらの目的のために、画像をブロックに分割し、それらのデルタをチェックして、変更のみを返送することが、このような画像をより速く更新する最も効率的な方法であると聞きました。誰かがその部門に何かポインタを持っているなら、私は非常に感謝するでしょう。

4

1 に答える 1

3

エンコーダーには、保存の名前をオーバーロードするメソッドがあります

通過する引数はストリームです

メモリブロックの保存のためにMemoryStreamに保存します

ファイルがありません!!

一番 、

プラシャント:)

于 2012-07-10T14:05:20.150 に答える