public byte[] GetColors()
{
var colors = new byte[3];
IntPtr hDesk = GetDesktopWindow();
IntPtr hSrce = GetWindowDC(hDesk);
IntPtr hDest = CreateCompatibleDC(hSrce);
IntPtr hBmp = CreateCompatibleBitmap(hSrce, SamplePoints.CenterBox.Width*2, SamplePoints.CenterBox.Height*2);
IntPtr hOldBmp = SelectObject(hDest, hBmp);
bool b = BitBlt(hDest,
0,
0,
SamplePoints.CenterBox.Width * 2,
SamplePoints.CenterBox.Height * 2,
hSrce,
0,
0,
CopyPixelOperation.SourceCopy);
using (var bmp = Bitmap.FromHbitmap(hBmp))
{
var colorsList = new List<Color>();
foreach (var point in SamplePoints.Points)
{
var pixel = bmp.GetPixel(point.X, point.Y);
var pixelColor = Color.FromArgb(pixel.R, pixel.G, pixel.B);
colorsList.Add(pixelColor);
}
var averagedColor = _colorHelper.ComputeAverageColors(colorsList);
colors = _colorMapper.Map(averagedColor);
}
SelectObject(hDest, hOldBmp);
DeleteObject(hBmp);
DeleteDC(hDest);
ReleaseDC(hDesk, hSrce);
return colors;
}
public void ShowDown() { const int iteration = 100; // Way 1 IColorProvider way1 = new DirectxColorProvider(); // Way 2 IColorProvider way2 = new GDIColorProvider(); var timer1 = new Stopwatch(); timer1.Start(); for (int x = 0; x < iteration; x++) { way1.GetColors(); } timer1.Stop(); Console.WriteLine(timer1.Elapsed); var timer2 = new Stopwatch(); timer2.Start(); for (int x = 0; x < iteration; x++) { way2.GetColors(); } timer2.Stop(); Console.WriteLine(timer2.Elapsed); }