[過去ログ]
ふらっと C#,C♯,C#(初心者用) Part137 (1002レス)
ふらっと C#,C♯,C#(初心者用) Part137 http://mevius.5ch.net/test/read.cgi/tech/1523004019/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
354: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 09:09:18.32 ID:9GXSG5IC0 イメージの配置はできるようになりましたが、いろいろ触っていると、チラツキが 気になるようになってきました テストしてみたところ、下記のレベルでもチラツキが発生します private void timer1_Tick(object sender, EventArgs e) { Graphics g = Graphics.FromImage(canvas); g.FillEllipse(bg_brush, x, y, radius, radius); x += 5; g.FillEllipse(fg_brush, x, y, radius, radius); count++; g.Dispose(); pictureBox1.Image = canvas; if (count == 10) { count = 0; timer1.Stop(); } } timer1.Intervalは100msにしてあります チラつきを押さえるには、フォームの DoubleBufferd を true にすると良いと見ましたが、 true にしても false にしても変わりないようです そもそも PictureBox は内部処理でダブルバッファリングを行っているとも見ました まだなにかできることはあるのでしょうか http://mevius.5ch.net/test/read.cgi/tech/1523004019/354
355: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 09:36:21.79 ID:9GXSG5IC0 書いてませんでしたが、bg_brushは背景色の、fg_brushは前景色のブラシです Brush bg_brush = new SolidBrush(SystemColors.Control); Brush fg_brush = new SolidBrush(Color.Black); で定義しています http://mevius.5ch.net/test/read.cgi/tech/1523004019/355
357: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 10:06:54.11 ID:9GXSG5IC0 canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height); として定義しています http://mevius.5ch.net/test/read.cgi/tech/1523004019/357
360: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 10:55:03.54 ID:9GXSG5IC0 https://ideone.com/s4ddqO これが全コードです 空のWindowsフォームアプリケーションで生成されたフォームに、ボタンとパネル、 PictureBoxを配置しただけの状態です パネルとPictureBoxは、DockをFillにしてウィンドウサイズに合わせてあります http://mevius.5ch.net/test/read.cgi/tech/1523004019/360
361: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 10:56:51.16 ID:9GXSG5IC0 これで、timer1のIntervalを50msにすると、はっきり分かる程度にちらつきます http://mevius.5ch.net/test/read.cgi/tech/1523004019/361
365: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 18:19:28.93 ID:9GXSG5IC0 >>363 環境の問題ですか・・・ 一応ディスプレイのリフレッシュレートは60Hz、タイマー設定が50msだと20Hzあれば 十分ですので、あまり関係ない気がするのですが でも私の環境でしか出ないのであれば、環境依存かもしれません >>364 これを避けるためにダブルバッファリングをするわけですし、書き換えた後のビットマップを PictureBoxに貼り付けるようにして、描画途中では貼っていません http://mevius.5ch.net/test/read.cgi/tech/1523004019/365
369: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 18:55:10.27 ID:9GXSG5IC0 >>367 カクカクした動きとチラつきを同一視しているわけではありません >>364 が書いたように、今回の例だと黒い円が一瞬消えているような感じがします 移動量の x += 10; をもっと少なくすれば目立たなくなりますが、それでも なんとなく嫌な感じがします でも言葉で説明するのは難しいですね 低フレームレートの認識を誤解していたようですが、インターバルを100msとか 50msとかだとディスプレイのリフレッシュレート(あるいは人間の認識力)に比べて 低すぎるので、かえって目立ってしまうということでしょうか? 確かに、インターバルを思い切って5msとかにしてみると、チラつきは軽減されてきた 気がします http://mevius.5ch.net/test/read.cgi/tech/1523004019/369
374: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 20:21:41.45 ID:9GXSG5IC0 >>370 ありがとうございます 私が確認しても、確かに上下で明らかにチラつきが違い、下ははっきりとわかります 上はほとんどわからないレベルですね PictureBoxもPanelも、どちらも出来上がったビットマップを貼り付けているのですから 同じ表示になりそうな気がしますが違いますね これをちゃんと理解できれば解決できそうです http://mevius.5ch.net/test/read.cgi/tech/1523004019/374
376: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 20:39:37.09 ID:9GXSG5IC0 >>372 私が「チラツキ」と表現しているのは、>>370が上げてくれたプログラムの 下側、panelで発生している現象です 私の理解では、>>370でなぜ表示に違いが生じるのかがわかりません どちらも、加工後のcanvasを貼り付けているはずなのに >>370でやっていることは、ダブルバッファリングではないのでしょうか? >>370のプログラムを実行してみて、違いはPictureBoxをウィンドウに直接 貼り付けているか、panelを置いてその上に貼り付けているか、です 私のテストプログラムでは、panelを置いてその上にpictureBox1を置いてます これが影響するのでしょうか http://mevius.5ch.net/test/read.cgi/tech/1523004019/376
378: デフォルトの名無しさん (ワッチョイ 03c3-XJxX) [sage] 2018/05/06(日) 21:02:31.57 ID:9GXSG5IC0 >>377 試してみました >>370と変わらない感じですね これまで質問してきた趣旨とは変わってしまいますが、 Graphics g = Graphics.FromImage(pictureBox1.Image); これでビットマップを書き換えた後に pictureBox1.Image を書き換えていないと いうことは、いちいち canvas ビットマップを用意して細工しなくてもよかったと いうことでしょうか で、本質ですが、ご提供いただいたテストプログラムでは明らかにチラつきの 改善が見られるということはダブルバッファリングは機能している、これ以上 気になるのであれば、それは滑らかさの問題であってチラつきの問題ではない、 と認識するのが良さそうですね http://mevius.5ch.net/test/read.cgi/tech/1523004019/378
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.033s