Hallo,
ich glaube man nennt es ambient backlight? Das was manche Fernseher haben, was den Raum in der "Durschnittsfarbe" des Bildes beleuchtet. Ich wollte mir sowas auch bauen, für den Computer.
Nun brauche ich aber die "Durschnittsfarbe" des Bildschirms. Ich habe theoretisch auch die Lösung:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| public Color ScreenshotT() { System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(width, height); System.Drawing.Graphics gra = System.Drawing.Graphics.FromImage(bmp); gra.CopyFromScreen(0, 0, 0, 0, bmp.Size); gra.Dispose();
int r = 0; int g = 0; int b = 0;
for (int i = 0; i < height; i = i + 10) { for (int a = 0; a < width; a = a + 10) { r += bmp.GetPixel(a, i).R; g += bmp.GetPixel(a, i).G; b += bmp.GetPixel(a, i).B; } }
r = r / teiler; g = g / teiler; b = b / teiler;
bmp.Dispose();
return Color.FromArgb(255, Convert.ToByte(r), Convert.ToByte(g), Convert.ToByte(b)); } |
Allerdings ist es ein wenig langsam. Wenn ich jedes Pixel aufsummiere, dauert das ganze 4sek. So wie hier, bei nur jedem 100sten Pixel, dauert das Ganze ca. 200ms, was immernoch sehr langsam ist. (i7 @ 4,4Ghz)
Den Screenshot machen an sich, dauert schon 50ms. Eigentlich sollte das Ganze nur maximal so lange dauern.
Hat jemand eine Idee, wie man die Sache beschleunigen könnte?
MfG