私はこのサイトの投稿を検索していて、これに出くわしました: c#を使用してX、Yのピクセルの色を取得するにはどうすればよいですか?
この方法は、フォームのすぐ内側のピクセルの色を取得しようとする場合でも効果的ですか?
そうでない場合、カラー値の2D配列でフォームを本質的に「マッピング」する方法は何でしょうか。
たとえば、Tronゲームがあり、ライトバイクの次の場所に別のライトバイクがすでに含まれているかどうかを確認したいと思います。
ありがとう、イアン
私はこのサイトの投稿を検索していて、これに出くわしました: c#を使用してX、Yのピクセルの色を取得するにはどうすればよいですか?
この方法は、フォームのすぐ内側のピクセルの色を取得しようとする場合でも効果的ですか?
そうでない場合、カラー値の2D配列でフォームを本質的に「マッピング」する方法は何でしょうか。
たとえば、Tronゲームがあり、ライトバイクの次の場所に別のライトバイクがすでに含まれているかどうかを確認したいと思います。
ありがとう、イアン
using System;
using System.Drawing;
using System.Runtime.InteropServices;
sealed class Win32
{
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("user32.dll")]
static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
[DllImport("gdi32.dll")]
static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
static public System.Drawing.Color GetPixelColor(int x, int y)
{
IntPtr hdc = GetDC(IntPtr.Zero);
uint pixel = GetPixel(hdc, x, y);
ReleaseDC(IntPtr.Zero, hdc);
Color color = Color.FromArgb((int)(pixel & 0x000000FF),
(int)(pixel & 0x0000FF00) >> 8,
(int)(pixel & 0x00FF0000) >> 16);
return color;
}
}
これを使用して、次のことができます。
public static class ControlExts
{
public static Color GetPixelColor(this Control c, int x, int y)
{
var screenCoords = c.PointToScreen(new Point(x, y));
return Win32.GetPixelColor(screenCoords.X, screenCoords.Y);
}
}
したがって、あなたの場合、あなたは次のことができます:
var desiredColor = myForm.GetPixelColor(10,10);
GetPixelメソッドを使用して色を取得できます。
例えば
//画像ファイルからビットマップオブジェクトを作成します。ビットマップmyBitmap=new Bitmap( "Grapes.jpg");
//myBitmap内のピクセルの色を取得します。色pixelColor=myBitmap.GetPixel(50、50);
これは、さまざまな状況で詳細を確認するための別の方法である可能性があります。ここをクリックしてください
using System;
using System.Drawing;
using System.Runtime.InteropServices;
sealed class Win32
{
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("user32.dll")]
static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
[DllImport("gdi32.dll")]
static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
static public System.Drawing.Color GetPixelColor(int x, int y)
{
IntPtr hdc = GetDC(IntPtr.Zero);
uint pixel = GetPixel(hdc, x, y);
ReleaseDC(IntPtr.Zero, hdc);
Color color = Color.FromArgb((int)(pixel & 0x000000FF),
(int)(pixel & 0x0000FF00) >> 8,
(int)(pixel & 0x00FF0000) >> 16);
return color;
}
}
フォームからピクセルの色を取得するために参照した質問のメソッドを使用できます。最初にピクセルがフォームの境界内にあるかどうかを確認する必要があり、座標をから変換する必要があります。画面の座標にフォームを、またはその逆にフォームを作成します。
編集:少し考えた後、誰かがあなたのフォームの上に別のウィンドウを開いた場合、これは良くありません!それを行う別の方法を理解するのが最善だと思います...