将低质量图像转换为标签

时间:2012-05-04 10:09:04

标签: vb.net image bitmap label

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

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

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

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 是图像中的Graphics对象,我将返回主窗口。

还尝试更改 g 的属性,但没有产生任何积极影响。

任何人都知道如何在不改变返回图像质量的情况下使其正常工作?欢迎任何提示/建议。

2 个答案:

答案 0 :(得分:4)

因为Drawing2D.SmoothingMode仅适用于Graphics.DrawEllipseGraphics.DrawLine等2D矢量绘图方法。

它不会影响使用Graphics.DrawImage绘制位图。

来自.NET documentation

  

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

此时您有两种选择:

  1. 预渲染图像的每个可能方向,然后在每个刻度处显示不同的Image个对象
  2. 使用.NET vector drawing methods渲染图片,而不是使用预渲染的位图。
  3. 在不知道你正在改变的实际图像的情况下,我不能说哪种图像更合适。

答案 1 :(得分:0)

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