C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: C#でのマウスの軌跡、筆圧について


(過去ログ 107 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■63691 / inTopicNo.1)  C#でのマウスの軌跡、筆圧について
  
□投稿者/ R (1回)-(2012/09/27(Thu) 21:22:43)

分類:[C#] 

visual C#にて筆圧感知のごとくマウスがとどまる時間に比例して線が太くなるプログラムを作りたいと考えています。
現在のコードにどのようなコードを足せばこれが実現できるでしょうか。
どなたかご教授お願いいたします。


現在できているコードは
-------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;



namespace ボタンが移動するプログラム_いじくれるバージョン
{

    public partial class Form1 : Form
    {
        //時間経過をはかるためのクラス
        Stopwatch myStopWatch = new Stopwatch();
        //スタート・ストップボタン用
        Boolean sw = false;

        int count=0;
        public Form1()

        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //label1にスタートから現在までの時間を表示させる
            label1.Text = myStopWatch.Elapsed.ToString();
            
        }
        private void timer2_Tick(object sender, EventArgs e)
        {
            label2.Text = myStopWatch.Elapsed.ToString();

        }

        private void timer3_Tick(object sender, EventArgs e)
        {

            label3.Text = myStopWatch.Elapsed.ToString();

        }
        private void timer4_Tick_1(object sender, EventArgs e)
        {
            label4.Text = myStopWatch.Elapsed.ToString();
        }

        private void timer5_Tick_1(object sender, EventArgs e)
        {
            label5.Text = myStopWatch.Elapsed.ToString();
        }

        Graphics grfx;
        int start = 1;
        int startX;
        int startY;
        

        private void Form1_Load(object sender, EventArgs e)
        {


            pictureBox1.Image = new Bitmap(Screen.PrimaryScreen.WorkingArea.Width,
                Screen.PrimaryScreen.WorkingArea.Height);
            grfx = Graphics.FromImage(pictureBox1.Image);
 
        
            timer1.Start();
            //timer2.Start();
            //timer3.Start();

            this.Text = "実験";

            //ラベルのプロパティ
            this.label1.Text = myStopWatch.Elapsed.ToString();
            this.label1.BackColor = Color.White;
            this.label1.Font = new System.Drawing.Font("MS UI Gothic", 15);
            this.label1.BorderStyle = BorderStyle.Fixed3D;
            this.label1.Location = new Point(50, 50);
            this.label1.Size = new Size(200, 25);
            this.label1.TextAlign = ContentAlignment.TopCenter;
            this.label1.AutoSize = false;

            this.label2.Text = myStopWatch.Elapsed.ToString();
            this.label2.BackColor = Color.White;
            this.label2.Font = new System.Drawing.Font("MS UI Gothic", 15);
            this.label2.BorderStyle = BorderStyle.Fixed3D;
            this.label2.Location = new Point(50, 75);
            this.label2.Size = new Size(200, 25);
            this.label2.TextAlign = ContentAlignment.TopCenter;
            this.label2.AutoSize = false;

            this.label3.Text = myStopWatch.Elapsed.ToString();
            this.label3.BackColor = Color.White;
            this.label3.Font = new System.Drawing.Font("MS UI Gothic", 15);
            this.label3.BorderStyle = BorderStyle.Fixed3D;
            this.label3.Location = new Point(50, 100);
            this.label3.Size = new Size(200, 25);
            this.label3.TextAlign = ContentAlignment.TopCenter;
            this.label3.AutoSize = false;

            this.label4.Text = myStopWatch.Elapsed.ToString();
            this.label4.BackColor = Color.White;
            this.label4.Font = new System.Drawing.Font("MS UI Gothic", 15);
            this.label4.BorderStyle = BorderStyle.Fixed3D;
            this.label4.Location = new Point(50, 125);
            this.label4.Size = new Size(200, 25);
            this.label4.TextAlign = ContentAlignment.TopCenter;
            this.label4.AutoSize = false;

            this.label5.Text = myStopWatch.Elapsed.ToString();
            this.label5.BackColor = Color.White;
            this.label5.Font = new System.Drawing.Font("MS UI Gothic", 15);
            this.label5.BorderStyle = BorderStyle.Fixed3D;
            this.label5.Location = new Point(50, 150);
            this.label5.Size = new Size(200, 25);
            this.label5.TextAlign = ContentAlignment.TopCenter;
            this.label5.AutoSize = false;


            //スタート・ストップボタンのプロパティ
            //this.button1.Text = "スタート";
           // this.button1.Size = new Size(85, 30);
           // this.button1.Location = new Point(40, 100);


            //リセットボタンのプロパティ
           // this.button2.Text = "リセット";
           // this.button2.Size = new Size(85, 30);
            //this.button2.Location = new Point(160, 100);
            //this.button2.Enabled = false;


            //表示更新用タイマーのプロパティ
            this.timer1.Interval = 10;
            this.timer2.Interval=10;
            this.timer3.Interval=10;
            this.timer4.Interval = 10;
            this.timer5.Interval = 10;



        }

        

        private void button1_Click(object sender, EventArgs e)
        {
 
            if (button1.CausesValidation == true)
            {
                count++;
            }
            if (count == 1)
            {
                button1.Location = new Point(300, 300);
            }
            if (count == 2)
            {
                button1.Location = new Point(300,300);
            }
            if (count == 3)
            {
                button1.Location = new Point(1300, 650);
            }
            if (count == 4)
            {
                button1.Location = new Point(1300, 650);
            }
            if (count == 5)
            {
                button1.Location = new Point(1300, 10);
            }
             if (count == 6)
            {
                button1.Location = new Point(1300,10);
            }
             if (count == 7)
            {
                button1.Location = new Point(10, 650);
            }
             if (count == 8)
            {
                button1.Location = new Point(10, 650);
            }
             if (count == 9)
            {
                button1.Location = new Point(650,325);
            } 
            if (count == 10)
            {
                button1.Location = new Point(650,325);
            }
            
            //スイッチがoff(計測開始していない)とき
            if (sw == false)
            {
                //計測開始
                myStopWatch.Start();
                //表示更新タイマー開始
                timer1.Start();
                timer2.Start();
                timer3.Start();
                timer4.Start();
                timer5.Start();
                //スイッチon
                sw = true;
                //リセットボタン使用不可
               // button2.Enabled = false;
                //「スタート」だったボタンの表示を「ストップ」に変更
                button1.Text = "☆";
            }


            //スイッチがoff以外のとき(つまりはonのとき)
            else
            {
                //計測終了
                myStopWatch.Stop();
                //表示固定
                timer1.Stop();
                timer2.Stop();
                timer3.Stop();
                timer4.Stop();
                timer5.Stop();

                //スイッチoff
                sw = false;
                //リセットボタン使用可
               // button2.Enabled = true;
                //「ストップ」だったボタンの表示を「スタート」に変更
                button1.Text = "★";
            }            


        }

         private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
         {
             start = 1;
             startX=e.X;
             startY=e.Y;
         }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            start = 1;
       
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
           // if(start ==0) return;
            start = 1;
           
            grfx.DrawLine(Pens.Magenta,startX,startY,e.X,e.Y);
            startX = e.X;
            startY = e.Y;
            pictureBox1.Refresh();
        }

       
です。

ちなみに表示される5つのlabelについては無視していただいて構いません。
よろしくお願いいたします。

引用返信 編集キー/
■63692 / inTopicNo.2)  Re[1]: C#でのマウスの軌跡、筆圧について
□投稿者/ オショウ (19回)-(2012/09/27(Thu) 21:46:23)
No63691 (R さん) に返信
> visual C#にて筆圧感知のごとくマウスがとどまる時間に比例して線が太くなるプログラムを作りたいと考えています。
> 現在のコードにどのようなコードを足せばこれが実現できるでしょうか。
> どなたかご教授お願いいたします。

  MouseMove で、前回取得した座標と同じならば、ペンの太さを太くしていく
  ようなコードが必要では?
  移動したら、ペンの太さを元に戻す(細くする)とか・・・

  もしくは、太くするのに時間経過を加味すれば、もう少し面白いことができるのでは
  ないでしょうか。

以上。参考まで
引用返信 編集キー/
■63704 / inTopicNo.3)  Re[2]: C#でのマウスの軌跡、筆圧について
□投稿者/ R (2回)-(2012/09/28(Fri) 17:01:48)
2012/09/28(Fri) 17:02:53 編集(投稿者)

>   MouseMove で、前回取得した座標と同じならば、ペンの太さを太くしていく
>   ようなコードが必要では?
>   移動したら、ペンの太さを元に戻す(細くする)とか・・・
>
>   もしくは、太くするのに時間経過を加味すれば、もう少し面白いことができるのでは
>   ないでしょうか。
>
> 以上。参考まで

アドバイスありがとうございました!

解決済み
引用返信 編集キー/
■63738 / inTopicNo.4)  Re[1]: C#でのマウスの軌跡、筆圧について
□投稿者/ Jitta (9回)-(2012/10/02(Tue) 21:15:24)
Jitta さんの Web サイト
No63691 (R さん) に返信
面白そうなんだけど、考え方が甘いような?

> マウスがとどまる時間に比例して線が太くなる
 文章で書くのは難しいですが、(0,0) の位置に3秒とどまっていました。次に MouseMove イベント ハンドラに入ってきたときは (20, 10) でした。ここには0.5秒しかとどまらず、次の MouseMove では(22,12)でした。ここも0.5秒で、次の座標は(24,14)でした。
 この様な場合、(0,0):3sec-(20,10):0.5sec-(22,12):0.5sec-(24,14):0.5secと線を引いていくわけですが、太さはそれぞれ、どうなるのでしょうか?
 後の方が“ゆっくり”動いているので、長く止まっていた前よりも太くしたいような??

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -