【问题标题】:c# reduced image qualityc#降低图像质量
【发布时间】:2017-08-03 04:32:01
【问题描述】:

我正在编写一个类似于 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();
}

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

【问题讨论】:

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


【解决方案1】:

我正在写一个类似 TeamViewer 的程序

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

您的问题是您没有考虑任何之前的帧,因此传输的数据有很多错误。一般而言,画面时时刻刻变化不大。您需要将之前的帧与当前帧进行比较,以确定发生了什么变化并只发送增量。因此,您的问题本质上是如何以相当快的方式流式传输移动图像连续帧

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

您会发现视频编解码器不仅适用于当前帧,还适用于之前的帧。因此,您可以将屏幕想象成一个更大的矩形棱柱在时间上移动的切片。因此,只需以 2D 方式解决它,例如尝试减少位深度;空间分辨率是不够的。

【讨论】:

  • 您有任何您认为有用的资源吗?
【解决方案2】:

使用此将其保存为 jpg 8 位

public Bitmap(
    int width,
    int height,
    PixelFormat format
)

【讨论】:

    猜你喜欢
    • 2019-08-23
    • 1970-01-01
    • 2016-06-06
    • 2010-11-12
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多