【问题标题】:How to work with graphics correctly如何正确处理图形
【发布时间】:2013-02-22 20:42:02
【问题描述】:

我正在尝试使用除标准图形之外的更高级的图形。 我的一个尝试是创建一些有用的控件——一个旋钮。 我有一个图像包含 100 个旋钮,值为 1-100,在项目中我将其拆分为 位图数组 包含每个值的位图(1-100 )。

这是旋钮对于某个值的样子,可以通过按住鼠标并向上/向下拖动来更改该值。

我的技术是,每当值发生变化时,作为 Control 对象的旋钮的 BackgroundImage 属性将更改为位图数组中“Value”索引中的图像。这意味着如果我有位图数组 X、值 V 和旋钮 K,那么K.BackgroundImage = X[V]。每次更改值都会重复此操作。

问题是:当我在运行时增加/减少值时,旋钮在图像变化期间就像“闪烁”。这让我觉得我的技术不好,我想知道是否有更好的方法来做到这一点。

*旋钮的设计不是我的,只是在网上找到的。

【问题讨论】:

  • 一些代码(特别是绘图代码)怎么样。什么环境?表格? WPF?银光? ASP.NET?
  • 也许在控件的某处有一个后台缓冲区设置。
  • 地铁?表格? WPF?银光?视窗电话? ASP.NET?单触?
  • 您需要对动画进行双重缓冲。真的需要 100 个子图像吗?很确定 GDI+ 可以旋转图像。
  • c# double buffering buttons 的可能重复项

标签: c# .net graphics


【解决方案1】:

我将假设您有一个 UserControl 或某种 Control 派生子类。如果你不这样做,那就这样......

当您使用它时,请阅读这篇精彩的文章:http://www.codeproject.com/Articles/12870/Don-t-Flicker-Double-Buffer

底线,在 OnPaint 覆盖中执行您的绘画并在您的构造函数中执行以下操作:

    SetStyle(
        ControlStyles.UserPaint |
        ControlStyles.AllPaintingInWmPaint |
        ControlStyles.OptimizedDoubleBuffer, true);

这应该可以解决您的闪烁问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多