在线等一个改变图片对比度的算法

qq100191677 2010-08-24 10:32:36

/// <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;
}
}
找个是处理亮度的,很好.能还原
我需要一个改变之后能还原的 改变对比度的算法
...全文
169 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq100191677 2010-08-24
  • 打赏
  • 举报
回复
么人关注了哦?
qq100191677 2010-08-24
  • 打赏
  • 举报
回复
楼上的给的结果
算法不是很好
参数相同,结果不同
qq100191677 2010-08-24
  • 打赏
  • 举报
回复
传入相同的参数得到的结果应该 一样吧
兔子-顾问 2010-08-24
  • 打赏
  • 举报
回复
porschev 2010-08-24
  • 打赏
  • 举报
回复
龍月 2010-08-24
  • 打赏
  • 举报
回复
还原的话? 是 还原操作 还是 一下子还原成 初始图片??

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧