画像を描画する画像を描画するボックスをマウスでドラッグするC#画像を描画する方法
答えて
画像ボックスのmousemoveイベントをキャプチャして、画像ボックスから画像を取得します。
グラフィックg = pictureBox.CreateGraphics(); 次に、このグラフィックスオブジェクトを使用して描画したいものを描画することができます。
フォームにPictureBoxを配置し、BackColorを白に設定します。
private Point? _Previous = null;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
_Previous = e.Location;
pictureBox1_MouseMove(sender, e);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (_Previous != null)
{
if (pictureBox1.Image == null)
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
}
pictureBox1.Image = bmp;
}
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
g.DrawLine(Pens.Black, _Previous.Value, e.Location);
}
pictureBox1.Invalidate();
_Previous = e.Location;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
_Previous = null;
}
そして離れて描く:次に、(あなたが実際に以下のマウスイベントをフックする必要があり、すなわち、あなただけコピーして、フォームにこのコードを貼り付けることはできません)フォームにこのコードを追加します!
Graphics
オブジェクトのSmoothingMode
プロパティを設定することで、描画されたイメージの品質をいくらか向上させることができます。
更新:ネットCFがPens
コレクションを持ってdoes't、およびMoustEventArgs
はLocation
を持っていないので、ここでCFに適したバージョンである:ここで
private Point? _Previous = null;
private Pen _Pen = new Pen(Color.Black);
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
_Previous = new Point(e.X, e.Y);
pictureBox1_MouseMove(sender, e);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (_Previous != null)
{
if (pictureBox1.Image == null)
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
}
pictureBox1.Image = bmp;
}
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{
g.DrawLine(_Pen, _Previous.Value.X, _Previous.Value.Y, e.X, e.Y);
}
pictureBox1.Invalidate();
_Previous = new Point(e.X, e.Y);
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
_Previous = null;
}
助けていただきありがとうございますが、ペンとe.locationを知らないエラーが発生しました – Gold
@Gold:CFにはPensコレクションがなく、MouseEventArgsにはこのメソッドのCFフレンドリーバージョンが追加されましたaロケーション(ちょうどXとY) – MusiGenesis
+1、短く、あまりよく言われていない質問への長い、詳細な答え。 :) – JYelton
、pictureBox1 ==署名。私は、このようにVBに翻訳:
グローバル:
Dim _previous As Point = Nothing
Dim _pen As Pen = New Pen(Color.Black)
Dim drawing As Boolean = False
''' <summary>
''' This handles the signature drawing events (drawing)
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub signature_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles signature.MouseMove
If drawing = True Then
If signature.Image Is Nothing Then
Dim bmp As Bitmap = New Bitmap(signature.Width, signature.Height)
Using g As Graphics = Graphics.FromImage(bmp)
g.Clear(Color.White)
End Using
signature.Image = bmp
End If
Using g As Graphics = Graphics.FromImage(signature.Image)
g.DrawLine(_pen, _previous.X, _previous.Y, e.X, e.Y)
End Using
signature.Invalidate()
_previous = New Point(e.X, e.Y)
End If
End Sub
''' <summary>
''' this indicates somebody is going to write a signature
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub signature_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles signature.MouseDown
_previous = New Point(e.X, e.Y)
drawing = True
signature_MouseMove(sender, e)
End Sub
''' <summary>
''' the signature is done.
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub signature_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles signature.MouseUp
_previous = Nothing
drawing = False
End Sub
- 1. 縁取り画像の描画方法
- 2. 描画領域に画像を描画
- 3. VB.NETで画像を上に描画する方法
- 4. Max SDKでビューポートに画像を描画する方法
- 5. Qtでタイル画像を描画する方法
- 6. OpenGLでビットマスク画像を描画する最速の方法
- 7. アンドロイドで小さな画像をキャンバスに描画する方法
- 8. 画像を描画してファイルに保存する方法は?
- 9. iPhone SDKの画像にアウトラインを描画する方法
- 10. (pygame)で画像を描画する方法
- 11. Android:画像の上に描画を実装する方法
- 12. SwiftでNSOpenGLViewに画像を描画する方法は?
- 13. TPanelで画像を描く方法
- 14. 画像をAndroidで描画
- 15. この方法で画像を描画しますか?
- 16. 画像をズームするときに指で画像を描く方法は?
- 17. 描画長方形画像-LibGdx
- 18. 画像を描画するJava Mousepress()
- 19. 透明な画像を描画する
- 20. jframe gameの画像を描画する
- 21. javascript - レイヤーで画像を描画する
- 22. 画像を描画するスクリプト
- 23. TextBoxにアニメーション画像を描画する
- 24. Graphics2Dで画像を描画する
- 25. 元の画質でキャンバスにURLから画像を描画する方法
- 26. 画像に描く方法Angular2 Ionic2
- 27. Javaの描画画像が
- 28. パスワードフィールドを描画する方法Ember.TextFieldを描画する方法ですか?
- 29. 既存の画像に描画する
- 30. smart gwt beginner- drawImg.setSrc()を使用して描画パネルに画像を描画する方法
Eeeeep、神なし!この方法でちらつきのあるグラフィックスが得られます。私が知っている.CreateGraphics()の唯一の用途は文字列を測定することです。代わりにOnPaintをオーバーライドする必要があります。 – Quibblesome
を使用するか、.Imageプロパティを使用します。カスタム描画を行うつもりなら、私はPictureboxを完全になくし、Controlから継承します。 – Quibblesome