0

我正在尝试向用户传递一个显示倒计时的图像。为此,我使用了一个单独的线程来检查何时应该启动倒数计时器,如果是这样,我每 6 秒绘制一次图像。

令人讨厌的是,当我将绘制的图像传递给 UI 时,图像的质量发生了变化,并且对用户来说看起来很糟糕。

这是我处理图纸的小脚本:

Try
   remainingTime = (#12:04:00 AM# - (DateTime.Now - local_DateTimeclick)).ToString("HH:mm:ss")
   remainingTimeInSeconds = Convert.ToDateTime(remainingTime).Minute * 60 + Convert.ToDateTime(remainingTime).Second

   If remainingTimeInSeconds Mod 6 = 0 Then
      g.ResetTransform()
      g.TranslateTransform(52, 52)
      g.RotateTransform(230 - remainingTimeInSeconds / 6 * 9)

      'g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
      'g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
      'g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
      'g.CompositingMode = Drawing2D.CompositingMode.SourceCopy
      'g.PixelOffsetMode = Drawing2D.PixelOffsetMode.

      g.DrawImage(Tick, 10, 10)
   End If

Catch
   remainingTime = "Times Up"
End Try

在上面的部分中, - *local_DateTimeClick* 是倒计时开始时设置的变量 - Tick是一个位图,表示我必须每 6 秒绘制的图像 - g是我返回到的图像中的图形对象主窗口。

还尝试更改g的属性,但没有积极效果。

任何人都知道我该怎么做才能使其正常工作而不改变返回图像的质量?欢迎任何提示/建议。

4

2 回答 2

4

因为Drawing2D.SmoothingMode只适用于 和 等二维矢量图绘制Graphics.DrawEllipse方法Graphics.DrawLine

它不影响使用Graphics.DrawImage.

.NET 文档

平滑模式指定线条、曲线和填充区域的边缘是否使用平滑(也称为抗锯齿)。

此时您有两个选择:

  1. 预渲染图像的每个可能方向,然后Image在每个刻度处显示不同的对象
  2. 使用.NET 矢量绘图方法来渲染图像,而不是使用预渲染位图。

在不知道您正在转换的实际图像的情况下,我不能说哪个更合适。

于 2012-11-09T18:13:56.607 回答
0

从我公司的平面设计师的角度来看,我认为您应该裁剪图像以适合标签:
1.它通过节省处理能力来提高性能。
2. 更好看?!
问候

于 2012-05-04T12:48:19.477 回答