110,534
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 图像亮度变化
/// value大于0图像变亮,value小于0图像变暗
/// value的取值范围是-255~255
/// </summary>
/// <param name="bitmap">原始图像</param>
/// <param name="value">亮度变化值:大于0图像变亮,小于0图像变暗value的取值范围是-255~255</param>
/// <returns>亮度变化后的图像</returns>
public static Bitmap Lightness(Bitmap bitmap, int value)
{
if (bitmap == null)
{
return null;
}
int width = bitmap.Width;
int height = bitmap.Height;
try
{
Bitmap bmpReturn = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData srcBits = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData targetBits = bmpReturn.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
unsafe
{
byte* pSrcBits = (byte*)srcBits.Scan0.ToPointer();
byte* pTargetBits = (byte*)targetBits.Scan0.ToPointer();
int stride = srcBits.Stride;
byte* pTemp;
for (int h = 0; h < height - 1; h++)
{
for (int w = 0; w < width - 1; w++)
{
int r, g, b;
int r1, g1, b1;
int r2, g2, b2;
pTemp = pSrcBits;
r = pTemp[2];
g = pTemp[1];
b = pTemp[0];
if (value >= 0)
{
r1 = r + ((255 - r) * value) / 255;
g1 = g + ((255 - g) * value) / 255;
b1 = b + ((255 - b) * value) / 255;
}
else
{
r1 = r + (r * value) / 255;
g1 = g + (g * value) / 255;
b1 = b + (b * value) / 255;
}
pTargetBits[2] = (byte)r1;
pTargetBits[1] = (byte)g1;
pTargetBits[0] = (byte)b1;
pSrcBits += 3;
pTargetBits += 3;
}
pSrcBits += srcBits.Stride - width * 3;
pTargetBits += srcBits.Stride - width * 3;
}
}
bitmap.UnlockBits(srcBits);
bmpReturn.UnlockBits(targetBits);
return bmpReturn;
}
catch
{
return null;
}
}
找个是处理亮度的,很好.能还原