问题标签 [double-buffering]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
903 浏览

c - 选项卡控件上闪烁 - WIN32

我有一个 WIN32 应用程序。它的主窗口是hwndMain,它的一个子窗口是hwndView。上有一个选项卡控件hwndTabhwndView

当我调整大小时hwndMainhwndView调整大小等hwndTab。它闪烁一点,但不多。

我曾尝试使用WS_EX_COMPOSITED样式( for hwndViewor hwndTab),但它只是给了我空白窗口。我尝试使用WS_EX_TRANSPARENT它并解决了闪烁问题,但是当窗口大小调整为更大时,子项的更新速度非常慢,例如我看到黑色区域一秒钟,然后该区域被更新。

我已经TreeView通过使用WS_CHIPCHILDREN样式成功解决了闪烁问题。(见下文备注)。但是使用WS_CHIPCHILDRENstlye forhwndView并不能解决选项卡控件的闪烁问题。

WM_ERASEBKGND我也关注了Not set hbrBackground

我想使用双缓冲区进行选项卡控制,但我找不到用于此目的的教程。我找到的所有教程都是:在WM_PAINT创建CompatibleDC和之后,在和......CompatibleBitmap中画出你想要的东西;memdc但我不想在WM_PAINTfor中进行任何自定义绘图hwndTab。我只想让选项卡控件完成这项工作,但只显示最终结果。

有人可以告诉我一个小例子,如何双缓冲选项卡控件(如果您认为这将解决选项卡控件的闪烁问题),语言为c+ winapi,因为我不了解 C#、Net 等.


备注:对于我的 TreeView,它是 window 的子级hwndContainer。它被创建为:

使用WS_CLIPCHILDREN修复闪烁,即使我不使用双缓冲。但是放在 WS_CLIPCHILDREN第一个参数位置就很奇怪了。如果我把它放在 WS_CHILD 之后,即

,然后闪烁仍然发生。

所以我在创建时也尝试使用第一种方式hwndView,但它只是给出了空白的白色窗口。我真的对这些东西感到困惑。

WS_EX_COMPOSITED这是我使用时的空白窗口图片hwndView。我用的时候没有这个问题hwndContainer

hwndView实际上有两个孩子:一个选项卡控件hwndTab和一个有自己的双缓冲区和绘图的孩子。我不确定这是否会导致使用WS_EX_COMPOSITED.

在此处输入图像描述

0 投票
4 回答
5822 浏览

c - 调整窗口大小时是否可以完全消除闪烁?

通常,即使使用双缓冲,在调整窗口大小时,似乎也不可避免地会发生闪烁。

第一步,原始窗口。

第1步

第 2 步,调整窗口大小,但未绘制额外区域。

第2步

第 3 步,调整窗口大小,并绘制多余的区域。

第 3 步

是否有可能以某种方式隐藏 setp 2?我可以在绘画动作完成之前暂停调整大小的过程吗?

这是一个例子:

是否可以消除闪烁?

0 投票
1 回答
2820 浏览

java - 使用双缓冲 Java Applet 停止小程序闪烁

很抱歉一直问关于我的程序的问题,但我想我快到了,我正在自学 Java,所以请多多包涵。我正在创建一个小程序,当狗对象靠近绵羊时,它会以随机方向在屏幕上移动绵羊对象。让羊朝随机方向移动需要一些工作,在你们这里​​的帮助下,它现在可以工作(有点),但我现在要做的是阻止它在我将对象拖过屏幕时闪烁。我读过关于双缓冲的文章,我可以让它适用于在主类的paint方法中绘制的项目,但不能让它适用于我的羊和狗对象,这些对象在不同的​​类中被定义为单独的对象。任何帮助都感激不尽。这是我的代码:

0 投票
0 回答
402 浏览

java - Java:双缓冲图形和菜单栏不能一起工作

我仍然需要学习很多关于编程(java)的知识,到目前为止我主要使用图形。我尝试制作一个菜单栏,它奏效了。但是我在同时使用 Graphics 和 JMenubar 时遇到了问题。首先我可以绘制图形,但是在查看了一些网站(包括这个)之后,我设法让图形工作。不幸的是,不是双缓冲。

这就是我一直双缓冲的方式,我不知道这是否是双缓冲的坏方法:

这是我的代码,只有菜单栏和图形。主类:

绘画类:

我希望你能帮助我,我一直在寻找一段时间,我找到了一些双缓冲的方法,但它们没有奏效。其中一些是 BufferedImage 和 BufferStrategy。

感谢您的时间。

0 投票
1 回答
343 浏览

java - getGraphics() 阻止我的游戏开始

我正在学习双缓冲,我从老师那里得到的书告诉我要写我写的东西。但是当 java 试图从图像中获取图形对象时,它会崩溃。

框架 = 图像
引擎 = 图形

错误

图 1

图 2

游戏.java

引擎.java

0 投票
1 回答
1082 浏览

wpf - WPF ElementHost 在启用双缓冲的情况下无法绘制

嗨,我遇到了与此问题类似的问题

对我来说不同的是,我在 WinForms-MainForm 中使用“CreateParams-Method”来强制双缓冲。代码如下(例如DataGridView 绘制错误之后):

我现在的问题是,只要激活了这个 CreateParams,我的 WPF-ElementHost 在 WinForms-Usercontrol 中的内容只有在有 mouseover 事件时才会被绘制。

简短描述:用户控件“打开”但它是透明的。在我用鼠标移过它之后,例如 ComboBoxes 被绘制出来。

一旦我注释掉 CreateParams,一切正常(使用 WPF-ElementHost)。是否可以为 WPFElementHost 停用/使用不同的 CreateParams?

0 投票
0 回答
575 浏览

vb.net - VB.NET 用户控件缓冲图形

我想创建一个具有缓冲图形的基本用户控件。但是有些不对劲,它停在 Using gr As Graphics = Graphics.FromImage(m_Buffer) 这一行

我什至设法使 VS2010 崩溃。这就是为什么我怀疑我引入了一些错误。我从示例代码中复制了大部分部分,我猜至少 OnPaint 从未被调用,因为它不是我可以在设计器中选择的事件之一。

非常感谢你的帮助!

结束类

0 投票
2 回答
671 浏览

c - lpc1788上的双缓冲

我面临着很大的担忧。我目前正在参加一个三明治课程,我正在自学如何在嵌入式系统上开发软件——碰巧是在 open1788 板上。

我计划实现双缓冲功能,因为我可以在我的 LCD 屏幕上看到闪烁。确实可以在绘制时查看形状!

使用双缓冲,重绘整个屏幕的速度足够快。也许我应该深入研究管理剪辑,这样我只需要重绘需要的部分屏幕?但这不是问题。

所以,我写了几个函数来处理双缓冲选项的选择。如果我不希望软件使用双缓冲,那么我不会为它分配内存;否则我会。

问题是为堆分配的默认空间高达 1024 字节。我的临时缓冲区的长度为 261120 字节!(481 像素宽每 272 像素高,每个 16bpp)。

结果,malloc 返回 NULL。

我采取的第一个解决方案是放置一个静态缓冲区,我的意思是:

但明显的缺点是即使您不使用双缓冲,它仍然会被分配。

第二种解决方案是编辑配置文件以使堆更大,每替换 1024 字节,例如 1048576 字节 (0x100000)。我不喜欢这个解决方案,因为我应该专注于节省内存空间。

也许我非常怀念嵌入式编程技能?根据这一点,最好的解决方案是什么?我怎样才能取得进步?我不会告诉你我阅读和挖掘数据表的杂乱能力。

如果有人可以为我提供初学者参考资料,我将非常感激,这些参考资料主要适用于我正在编程的电路板。

提前致谢!

0 投票
2 回答
619 浏览

java - 简单的自定义绘画错误

我刚开始重新编码,我想我忘记了如何加倍缓冲。这是我现在拥有的代码,我不确定我缺少什么。当我启动它时,只有一个白色的屏幕,没有椭圆形。

渲染的错误是什么?

更新:编译错误@Override

0 投票
1 回答
813 浏览

c# - BufferedGraphics 闪烁

我试图实现自定义双缓冲,但它会导致闪烁。

这是控件(从控件继承的自定义控件)构造函数中的代码:

OnPaint 事件:

此外,在调整与缓冲相关的大小时会激活此代码:

Draw 方法比较复杂,但它首先用 BackColor 填充控件,其他无关紧要。

我有时可以用眼睛发现闪烁,主要是在调整窗口大小时。据我所知,黑色首先在控件上绘制,然后是缓冲区中的图形,它会导致闪烁。但是,BackColor 绝不是黑色。

该怎么做才能阻止这种情况?