我有一个带有轨迹栏滑块控件的工具,用于调整图像的亮度,对比度,伽玛等.
当用户拖动滑块时,我试图获取我的图像的实时更新.亮度和伽马算法是可接受的速度(大约170ms).但对比度算法约为380ms.
基本上我的表单是一个带滑块的工具窗口.每次更新图像时,它都会向父项发送一个重绘新图像的事件.工具窗口将原始未修改的图像锁定在内存中,因此我始终可以访问它的字节.因此,每次更改滑块的ValueChanged事件(例如"对比度"滑块)时,我都会这样做.
码:
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而不是单个循环.