相关疑难解决方法(0)

更快的位图对比度算法

我有一个带有轨迹栏滑块控件的工具,用于调整图像的亮度,对比度,伽玛等.

当用户拖动滑块时,我试图获取我的图像的实时更新.亮度和伽马算法是可接受的速度(大约170ms).但对比度算法约为380ms.

基本上我的表单是一个带滑块的工具窗口.每次更新图像时,它都会向父项发送一个重绘新图像的事件.工具窗口将原始未修改的图像锁定在内存中,因此我始终可以访问它的字节.因此,每次更改滑块的ValueChanged事件(例如"对比度"滑块)时,我都会这样做.

  • 工作(目标)位图的LockBits为Format24bppRgb(原始位图在Format32bppPArgb中)
  • Marshal.将位复制到byte []数组
  • 检查我正在做的操作(选择了哪个滑块)
  • 对比度使用以下代码:

码:

double newValue = 0;
double c = (100.0 + contrast) / 100.0;

c *= c;

for (int i = 0; i < sourcePixels.Length; i++)
{
    newValue = sourcePixels[i];

    newValue /= 255.0;
    newValue -= 0.5;
    newValue *= c;
    newValue += 0.5;
    newValue *= 255;

    if (newValue < 0)
        newValue = 0;
    if (newValue > 255)
        newValue = 255;

    destPixels[i] = (byte)newValue;
}
Run Code Online (Sandbox Code Playgroud)

我读了一次关于使用整数而不是浮点值来提高对比度的速度,但我再也找不到那篇文章了.

我尝试使用不安全的代码(指针),但实际上注意到速度降低.我假设这是因为代码使用嵌套for循环来迭代x和y而不是单个循环.

c# performance bitmap contrast

5
推荐指数
2
解决办法
1万
查看次数

标签 统计

bitmap ×1

c# ×1

contrast ×1

performance ×1