■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;
}
}
}
|
|