一笑而过。 public static class BitmapHelper { [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] public static unsafe Color GetImageAverageColor(Bitmap bitmap) { if (bitmap == null) { throw new ArgumentNullException("bitmap"); } int width = bitmap.Width; int height = bitmap.Height; Rectangle rect = new Rectangle(0, 0, width, height); try { BitmapData bitmapData = bitmap.LockBits( rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); byte* scan0 = (byte*)bitmapData.Scan0; int strideOffset = bitmapData.Stride - bitmapData.Width * 4; int sum = width * height; int a = 0; int r = 0; int g = 0; int b = 0; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { b += *scan0++; g += *scan0++; r += *scan0++; a += *scan0++; } scan0 += strideOffset; } bitmap.UnlockBits(bitmapData); a /= sum; r /= sum; g /= sum; b /= sum; return Color.FromArgb(255, r, g, b); } catch { return Color.FromArgb(127, 127, 127); } } }以上代码获取图片主色调。 参考案例是qq的背景取主色调: (高仿QQ2013通讯DEMO-10.30更新)点击下载 (360安全卫士DEMO)点击下载
遍历一遍每一个像素,然后将rgb的值作为key存到字典里,之后只要有相同颜色的像素,在字典中找到后就把value+1.最后取字典中value最大的
精确的就要rgb每个值都相同,相近的给出每个颜色的对应范围判断rgb值是否接近就好。
过程就如#1所云。
其中bmp是图片的实例,X,Y是图片中某点的代码
这样 返回的是一个Color 也就是ARGB的值
不知道你看懂没?
用不着,因为只要找最大的。http://blog.csdn.net/v_JULY_v/article/details/6403777
{
[SecurityPermission(SecurityAction.LinkDemand,
Flags = SecurityPermissionFlag.UnmanagedCode)]
public static unsafe Color GetImageAverageColor(Bitmap bitmap)
{
if (bitmap == null)
{
throw new ArgumentNullException("bitmap");
} int width = bitmap.Width;
int height = bitmap.Height;
Rectangle rect = new Rectangle(0, 0, width, height); try
{
BitmapData bitmapData = bitmap.LockBits(
rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
byte* scan0 = (byte*)bitmapData.Scan0;
int strideOffset = bitmapData.Stride - bitmapData.Width * 4; int sum = width * height; int a = 0;
int r = 0;
int g = 0;
int b = 0; for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
b += *scan0++;
g += *scan0++;
r += *scan0++;
a += *scan0++;
}
scan0 += strideOffset;
} bitmap.UnlockBits(bitmapData); a /= sum;
r /= sum;
g /= sum;
b /= sum; return Color.FromArgb(255, r, g, b);
}
catch
{
return Color.FromArgb(127, 127, 127);
}
}
}以上代码获取图片主色调。
参考案例是qq的背景取主色调:
(高仿QQ2013通讯DEMO-10.30更新)点击下载
(360安全卫士DEMO)点击下载