c#降低了图像质量

时间:2017-03-13 08:04:34

标签: c# image-processing image-resizing remote-desktop

我正在编写类似于TeamViewer的程序。但我有一个问题,屏幕分辨率太大。以下是我如何从屏幕生成图像。

byte[] ScreenShut()
{
    Bitmap bmp = new  Bitmap(Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height);

    Graphics gr = Graphics.FromImage(bmp);
    bmp.SetResolution(96.0F,96.0F);
    gr.CopyFromScreen(0, 0, 0, 0, new Size(bmp.Width, bmp.Height));
    MemoryStream ms = new MemoryStream();
    bmp.Save(ms, ImageFormat.Png);
    return ms.GetBuffer();
}

如何降低传入图片的质量?

2 个答案:

答案 0 :(得分:0)

使用此

将其另存为jpg 8位
public Bitmap(
    int width,
    int height,
    PixelFormat format
)

答案 1 :(得分:0)

  

我正在编写类似于TeamViewer的程序

我假设您指的是 RDP /桌面共享方面。

您的问题是您没有考虑任何之前的帧,因此传输的错误数据很多。一般来说,不是很多屏幕都会随时变化。您需要将先前帧与当前帧进行比较以确定已更改的内容并仅发送增量。因此,您的问题基本上是如何以合理快速的方式流动图像连续帧

任何流式视频解决方案都可以解决问题。也许是H.264?

您会发现视频编解码器不仅适用于当前帧,还适用于之前的帧。因此,您可以将屏幕视为在更大的矩形棱镜的时间内移动的切片。所以简单地以2D方式解决它,比如试图减少比特深度;空间分辨率是不够的。