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は、私が返す画像の Graphics オブジェクトですメインウィンドウ。

gのプロパティを変更してみましたが、プラスの効果はありませんでした。

返された画像の品質を変更せずにこれを適切に機能させるために何ができるか考えている人はいますか? ヒント/アドバイスは大歓迎です。

4

2 に答える 2

4

Drawing2D.SmoothingModeなどの 2D ベクター描画メソッドにのみ適用されるためです。Graphics.DrawEllipseGraphics.DrawLine

でのビットマップの描画には影響しませんGraphics.DrawImage

.NET ドキュメントから:

スムージング モードは、線、曲線、および塗りつぶされた領域のエッジがスムージング (アンチエイリアシングとも呼ばれます) を使用するかどうかを指定します。

この時点で、次の 2 つのオプションがあります。

  1. 画像の可能なすべての向きを事前にレンダリングしてから、Image各ティックで異なるオブジェクトを表示するだけです
  2. 事前にレンダリングされたビットマップを使用する代わりに、.NET ベクトル描画メソッドを使用してイメージをレンダリングします

変換している実際の画像を知らなければ、どちらがより適切かはわかりません。

于 2012-11-09T18:13:56.607 に答える
0

私の会社で従うグラフィックデザイナーの観点から、ラベルに収まるように画像をトリミングする必要があると思います
。1.処理能力を節約することでパフォーマンスを向上させます。
2.見た目が良くなる?!
よろしく

于 2012-05-04T12:48:19.477 に答える