草庐IT

DoubleBuffered

全部标签

c++ - 带有 alpha channel 的闪烁子窗口

当绘制包含带逐像素alphachannel的位图的子控件时,每当需要重新绘制它们时,我们会遇到很多闪烁。实际混合工作正常。我找到了很多关于减少闪烁的信息(例如thisquestion或thissite),但我似乎找不到任何专门适用于这种情况的信息。例如,我有一个带有几个不同位图的按钮,这些位图根据按钮的状态进行了alpha混合并blit到窗口。当它们的状态发生变化并且我需要绘制不同的位图时,我需要先重新绘制背景,否则它会与前一个状态位图遗留下来的像素混合。这就是我出现闪烁的地方,偶尔会有一些背景撕裂。让顶层父窗口绘制位图背景而不是纯色,以及子控件重叠的可能性,使问题变得更加复杂;仅仅将

c++ - GDI+ 双缓冲 : backbuffer dual-colored monochrome

我正在尝试使用C++、windowsapi和GDI+构建一个非常简单的图形应用程序。第一次尝试构建应用程序时,出现了严重的闪烁,因此此代码尝试使用双缓冲,但失败了。hdcBuf是后台缓冲区。当尝试使用GDI+Graphics::DrawCachedBitmap将某些内容绘制到后台缓冲区时,位图被绘制为黑白双色。LoadBitmapRes从EXE资源创建一个CachedBitmap;此函数适用于单缓冲。代码有什么问题吗?提前致谢!全局:CachedBitmap*fish;HDChdc;HDChdcBuf;HBITMAPhbmpBuf;Graphics*gfxBuf;WM_CREATE:h

c# - 如何对面板进行双重缓冲?

我有一个带有轮盘赌轮盘的面板,我需要对面板进行双重缓冲,以使其停止闪烁。谁能帮帮我?编辑:是的,我试过了。panel1.doublebuffered不存在,只有this.doublebuffered。而且我不需要缓冲表单,只需要缓冲面板。 最佳答案 您需要派生自Panel或PictureBox。这取决于您选择启用缓冲的方式。如果你设置了this.DoubleBuffer标志那么你应该没问题。如果您手动更新样式,那么您必须自己在WM_PAINT中绘制表单。如果您真的有雄心壮志,您可以维护自己的后台缓冲区并将其绘制为位图。usingSy

java - Swing/JFrame 与 AWT/Frame 在 EDT 之外的渲染

在实现您自己的呈现时使用AWTFrame和SwingJFrame与不使用标准JavaGUI组件之间的主要区别是什么?这是上一个问题的后续:AWTcustomrendering-capturesmoothresizesandeliminateresizeflicker关于Swing与AWT的典型谈话要点似乎并不适用,因为我们只使用框架。例如,重量级vs轻量级已经过时了(JFrame扩展了Frame)。那么对于这种情况,JFrame还是Frame哪个最好?它有什么有意义的不同吗?注意:在这种情况下,不希望在EDT中呈现。有一个未链接到EDT的应用程序工作流,渲染是在EDT之外按需完成的。将

Java 面板双缓冲

想知道是否有人能指出我正确的方向,我开发了一个乒乓球游戏,由于闪烁,它需要双缓冲。我尝试了这里的一些帖子,试图让它发挥作用,但我仍然是swingawtsuff的初学者,任何帮助都会非常感谢。publicclassPongPanelextendsJPanelimplementsRunnable{privateintscreenWidth=500;privateintscreenHeight=300;privatebooleanisPaused=false;privatebooleanisGameOver=false;privateintplayToPoints=10;privatePad

java - awt双缓冲

awt是否可以实现双缓冲(在java中)?目前,我知道swing不应该与awt一起使用,所以我不能使用BufferStrategy和诸如此类的东西(我已经有一些用awt编写的代码,我不想在swing中重写)。如果awt可以实现双缓冲,我是否必须手动编写缓冲区?与swing不同,awt似乎没有相同的内置双缓冲功能。如果我必须手写代码,是否有好的教程可供引用?还是对于新手程序员来说,改用swing更容易/更明智?很抱歉这个多步骤问题。感谢您的宝贵时间:) 最佳答案 这很容易在网络上得到解答。只需搜索“doublebufferawt”,您

c++ - 在双缓冲区多线程系统中执行指针交换

当双缓冲数据将在线程之间共享时,我使用了一个系统,其中一个线程从一个缓冲区读取,一个线程从另一个缓冲区读取并从第一个缓冲区读取。问题是,我要如何实现指针交换?我需要使用临界区吗?没有可用的Interlocked函数可以实际交换值。我不能让线程1从缓冲区1读取,然后开始从缓冲区2读取,在读取过程中,这将是appcrash,即使另一个线程没有开始写入它也是如此。我在Windows上的VisualStudioUltimate2010RC中使用nativeC++。 最佳答案 使用临界区是公认的做法。只需在您的所有线程之间共享一个CRITIC

Java:如何在 Swing 中进行双缓冲?

编辑两个为了防止刻薄的评论和单行答案遗漏重点:IFF就像调用setDoubleBuffered(true)一样简单,那么我如何访问当前离线缓冲区,以便我可以开始弄乱BufferedImage的底层像素数据缓冲区?我花时间写了一段运行的代码(看起来也很有趣)所以我真的很感激答案实际回答(真是令人震惊;)我的问题并解释这是什么/如何工作而不是一个-类轮和尖刻的评论;)这是一段可以在JFrame上弹跳正方形的有效代码。我想知道可用于转换这段代码以使其使用双缓冲的各种方法。请注意,我清除屏幕并重新绘制正方形的方式并不是最有效的,但这实际上不是这个问题的目的(在某种程度上,为了这个例子,它有点慢

c# - Winforms:SuspendLayout/ResumeLayout 还不够吗?

我有一个包含一些“自定义控件”的库。本质上,我们有自己的按钮、圆角面板和一些带有一些自定义油漆的组框。尽管OnPaint方法中有“数学”,但控件非常标准。大多数时候,我们所做的只是绘制圆角并向背景添加渐变。我们使用GDI+来做这一切。这些控件没问题(我们的客户认为它们非常漂亮),但是尽管有DoubleBuffer,您还是会看到一些重绘,尤其是当同一个表单上有20++个按钮(例如)时。在加载表单时,您会看到按钮在绘制……这很烦人。我很确定我们的按钮不是地球上最快的东西,但我的问题是:如果双缓冲区“打开”,所有重绘不应该在后台发生并且Windows子系统应该“立即”显示结果“?另一方面,如

c# - Winforms:SuspendLayout/ResumeLayout 还不够吗?

我有一个包含一些“自定义控件”的库。本质上,我们有自己的按钮、圆角面板和一些带有一些自定义油漆的组框。尽管OnPaint方法中有“数学”,但控件非常标准。大多数时候,我们所做的只是绘制圆角并向背景添加渐变。我们使用GDI+来做这一切。这些控件没问题(我们的客户认为它们非常漂亮),但是尽管有DoubleBuffer,您还是会看到一些重绘,尤其是当同一个表单上有20++个按钮(例如)时。在加载表单时,您会看到按钮在绘制……这很烦人。我很确定我们的按钮不是地球上最快的东西,但我的问题是:如果双缓冲区“打开”,所有重绘不应该在后台发生并且Windows子系统应该“立即”显示结果“?另一方面,如
12