X、Yでピクセルの色をC#で取得するにはどうすればよいですか?X、Yでピクセルの色をC#で取得するにはどうすればよいですか?
結果として、結果を必要なカラーフォーマットに変換できます。このためのAPI呼び出しがあると確信しています。
"モニタ上の任意のX、Yについて、そのピクセルの色を取得したいです。"
X、Yでピクセルの色をC#で取得するにはどうすればよいですか?X、Yでピクセルの色をC#で取得するにはどうすればよいですか?
結果として、結果を必要なカラーフォーマットに変換できます。このためのAPI呼び出しがあると確信しています。
"モニタ上の任意のX、Yについて、そのピクセルの色を取得したいです。"
ここ画面からピクセルの色を取得するには、Pinvoke.netからのコードです:脇P /呼び出し溶液から
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;
}
}
'GetPixelColor'メソッドで何をしたのか説明してください。 (主にビット単位の部分)ありがとう! –
ピクセル= 32ビットint GetPixelは32ビットのint型の値 をビット単位で取得し、32ビットの値を8ビットの値に分解するので、Color.FromArgb関数を使用して32ビットの値を3→8ビットに変換できます色。彼は必要ではない値を&0x0000FF00(唯一のsencondバイト)に変換するためにマスクを使用しています。0:255 –
画像にはBitmap.GetPixel
があります...あなたが何をしているのですか?そうでない場合、どのx、yの値を意味するのでしょうか?コントロールで?あなたはは、画像のために意味ですか、そしてあなたが多くのピクセルのを取得したい、とあなたが危険なコードで働いて気にしない場合は、Bitmap.LockBits
はへの呼び出しの多くよりもはるかに高速になることを
注意GetPixel
。
私は現在のディスプレイから、特定のファイルではなく、ペイントボックスのインスタンスからそれが必要です。 – MichaelICE
その場合はCLaRGeのソリューションをお勧めします。 –
、あなたがに、画面から画像データを取得するためにGraphics.CopyFromScreenを使用することができますグラフィックスオブジェクト。ただし、移植性について心配していない場合は、P/Invokeソリューションをお勧めします。 WPFのRefについては
:(PointToScreenの使用)
System.Windows.Point position = Mouse.GetPosition(lightningChartUltimate1);
if (lightningChartUltimate1.ViewXY.IsMouseOverGraphArea((int)position.X, (int)position.Y))
{
System.Windows.Point positionScreen = lightningChartUltimate1.PointToScreen(position);
Color color = WindowHelper.GetPixelColor((int)positionScreen.X, (int)positionScreen.Y);
Debug.Print(color.ToString());
...
...
public class WindowHelper
{
// ******************************************************************
[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.Windows.Media.Color GetPixelColor(int x, int y)
{
IntPtr hdc = GetDC(IntPtr.Zero);
uint pixel = GetPixel(hdc, x, y);
ReleaseDC(IntPtr.Zero, hdc);
Color color = Color.FromRgb(
(byte)(pixel & 0x000000FF),
(byte)((pixel & 0x0000FF00) >> 8),
(byte)((pixel & 0x00FF0000) >> 16));
return color;
}
追加情報:必要な 'System.Windows.Media.Color'名前空間を使うためにPresentationCore.dllを参照に追加します。 –
は、画面上またはあなたのアプリでウィンドウでこのどこかですか? – ChrisF
一般的なディスプレイです。私は特定のインスタンスについては気にしません。 – MichaelICE
モニター上の任意のX、Yについて、そのピクセルの色を取得したいとします。 – MichaelICE