答えて
をWinformsのためのハード要件は、Windowsがそれを要求したときにフォームを再描画することができるはずです。ウィンドウを最小化して復元すると、どのようなことが起こりますか?または、古いバージョンのWindowsで別のウィンドウを移動したとき。
このように、ウィンドウのピクセルを設定するだけでは不十分です。ウィンドウを再描画するときにピクセルをすべて失うことになります。代わりに、ビットマップを使用します。追加の負担は、ユーザーインターフェイスの応答性を維持して、ワーカースレッドで計算を行う必要があるということです。 BackgroundWorkerはその権利を得るのに便利です。
これを行う1つの方法は、ワーカーに入力するビットマップと表示するビットマップの2つのビットマップを使用することです。ピクセルの1行ごとに、作業中のビットマップのコピーが作成され、ReportProgress()に渡されます。 ProgressChangedイベントは、古いビットマップを破棄して、渡された新しいビットマップを保存し、Invalidateを呼び出して再描画を強制します。
あなたはこれらのリソースの恩恵を受ける可能性がありますSetting background color of a form
ご協力いただきありがとうございますが、本当に必要なのは、ピクセルの色を変更することではなく、色を変更することです。私が知っている唯一の解決策は、画面上のすべてのピクセルの画像ボックスを作成し、それらの色を変更することですが、それは本当に非効率的であると私を襲います。 – SiliconCelery
ここにいくつかのデモコードがあります。ハンスが言及した理由のため、塗り直すのは遅いです。速度を上げる簡単な方法は、遅れてビットマップを再計算することだけです。
Public Class Form1
Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
'create new bitmap
If Me.ClientRectangle.Width <= 0 Then Exit Sub
If Me.ClientRectangle.Height <= 0 Then Exit Sub
Using bmpNew As New Bitmap(Me.ClientRectangle.Width, Me.ClientRectangle.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
'draw some coloured pixels
Using g As Graphics = Graphics.FromImage(bmpNew)
For x As Integer = 0 To bmpNew.Width - 1
For y As Integer = 0 To bmpNew.Height - 1
Dim intR As Integer = CInt(255 * (x/(bmpNew.Width - 1)))
Dim intG As Integer = CInt(255 * (y/(bmpNew.Height - 1)))
Dim intB As Integer = CInt(255 * ((x + y)/(bmpNew.Width + bmpNew.Height - 2)))
Using penNew As New Pen(Color.FromArgb(255, intR, intG, intB))
'NOTE: when the form resizes, only the new section is painted, according to e.ClipRectangle.
g.DrawRectangle(penNew, New Rectangle(New Point(x, y), New Size(1, 1)))
End Using
Next y
Next x
End Using
e.Graphics.DrawImage(bmpNew, New Point(0, 0))
End Using
End Sub
Private Sub Form1_ResizeEnd(sender As Object, e As System.EventArgs) Handles Me.ResizeEnd
Me.Invalidate() 'NOTE: when form resizes, only the new section is painted, according to e.ClipRectangle in Form1_Paint(). We invalidate the whole form here to form an entire form repaint, since we are calculating the colour of the pixel from the size of the form. Try commenting out this line to see the difference.
End Sub
End Class
- 1. Android - ビットマップのピクセルカラーを変更する
- 2. PILのピクセルカラー値を変更する
- 3. アンドロイドディスプレイのピクセルカラーを変更する
- 4. チェック値の変更チェックボックスのフォーム(Awesomium VB.net)
- 5. 変更選択値のHTMLフォーム(Awesomium VB.net)
- 6. Vb.Netフォーム内部パネルサイズ変更の問題
- 7. VB.NetのWindowsアプリケーションのすべてのフォームのフォントサイズを変更します
- 8. VB.NETの他のフォームでスレッドのlabel.textを変更する方法
- 9. C#.NETでイメージのピクセルカラーを変更する方法
- 10. Androidキャンバスが一部のピクセルカラーを変更する
- 11. VB2010またはVB.NETで既定のフォームのプロパティを変更する
- 12. パネルの描画形状からフォームのサイズを変更する - VB.NET
- 13. ユーザーコントロールのリテラルテキストを変更VB.Net
- 14. EcoResProductCreateフォームを変更します
- 15. MSChart VB.NETのAxesのラベルを変更します
- 16. vb.netのコンソールテキストのカーニングを変更する
- 17. 実行時にコントロールの親を変更します。VB.NET
- 18. VB.NETで不明なオブジェクトのプロパティを変更します。
- 19. Javaカスタムコンポーネントのピクセルカラー
- 20. vb.netのWindowsフォームにリモートイメージを挿入しますか?
- 21. 別のフォームvb.netから機能を実行します
- 22. VB.NET改行の変更
- 23. フォームの背景のサイズを変更しますか?
- 24. Python。 Django。 CreateViewのget_context_dataからフォームのフィードを変更します。
- 25. 実際のフォームの変更を検出しますか?
- 26. タイトルの色を変更するRichTextBox VB.NET
- 27. vb.netのプリンタ設定を変更する
- 28. vb.netコントロールのレイアウト順を変更する
- 29. vb.net rebind datagridでvb.netの変更を表示する
- 30. 2つの異なるフォームからラベルを変更します
ここではっきりしてください。なぜ個々のピクセルを変更したいのですか? – Coffee
[スタックオーバーフローは個人研究の助手ではありません](http://meta.stackexchange.com/a/128553/140505) – Oded
マンデルブロセットを表示するプログラムを作成しています。個人の色を変更する必要があります各ピクセルはグラフ上の点を表し、したがってそれ自身の色を持つので、フォーム上のピクセル。 – SiliconCelery