| ■92941 / inTopicNo.1) | 
               クリックした場所の色情報の取得 | 
             
          
         
        
        □投稿者/ C#初心者 (8回)-(2019/11/11(Mon) 14:42:40)  
        
          
            
              
                 | 
                 分類:[C#] 
 
 いつもお世話になっております。
Windows formsでC#を用いて作成を行っています。
pictureboxをグラデーション(白と黒のグラデーション)で表示し、そのpicturebox内をクリックしたときにその部分の色のデータをrgb形式で取得して、numericUpDown1,2,3にそれぞれ表示させるものを作りたいと考えています。
グラデーションのやり方として
・https://dobon.net/vb/dotnet/graphics/lineargradientbrush.html
クリックしたところの色のデータ取得として
・https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11116345421
のサイトやほかに調べてやってみてはいるのですが(ほぼ丸写しの状態です)、データの取得がうまくいっていない状態です。
実行はできているので、何がおかしいのかアドバイスを頂けたらと思います。
よろしくお願いいたします。
以下が現在作成中のソースコードです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// 白黒カラー表示のため
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
namespace 作成中
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // グラデーションの作成  この部分は実行できている
            //描画先とするImageオブジェクトの作成
            Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            //ImageオブジェクトのGraphicsオブジェクトの作成
            Graphics g = Graphics.FromImage(canvas);
            //縦に白から黒へのグラデーションのブラシを作成
            LinearGradientBrush gb = new LinearGradientBrush(
                    g.VisibleClipBounds,
                    Color.FromArgb(255, 255, 255),
                    Color.FromArgb(0,0,0),
                    LinearGradientMode.Vertical); 
            //四角を描く
            g.FillRectangle(gb, g.VisibleClipBounds);
            //リソースを解放する
            gb.Dispose();
            g.Dispose();
            //PictureBox1に表示する
            pictureBox1.Image = canvas;
        }
        // ここまで
        // 画像をクリックしたときにその部分のRGBの値を取得する処理 この部分が再現できない
        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
           int X = e.Location.X;
           int Y = e.Location.Y;
          //マウスポインタを(0,0)へ
           Cursor.Position = new Point(0, 0);
           Bitmap bitmap = new Bitmap(pictureBox1.Image);
           //クリック時のカーソル位置
           Point pt = e.Location;
           Color LC = new Color();
           //pxCに座標の色を代入
           Color pxC = bitmap.GetPixel(X, Y);
           //LCにpxCの色を代入
           LC = pxC;
           int LR = LC.R;
           int LG = LC.G;
           int LB = LC.B;
           numericUpDown1.Value = LR;
           numericUpDown2.Value = LG;
           numericUpDown3.Value = LB;
        }
  }
}
  | 
               
            
           
         
        
       |