delphi – 如何在RGB图像中交换红色和蓝色并保持亮度?
发布时间:2020-12-15 09:13:03 所属栏目:大数据 来源:网络整理
导读:我正在读一个24位位图: var P: PByteArray;...for y:=0 to Bmp.Height-1 do begin P := Bmp.ScanLine[y]; for x:=0 to Bmp.Width-1 do begin R := P[3*x+2]; G := P[3*x+1]; B := P[3*x ]; 现在我将RGB与BGR交换: P[3*x+2] := B; P[3*x+1] := G; P[3*x ] :
我正在读一个24位位图:
var P: PByteArray; ... for y:=0 to Bmp.Height-1 do begin P := Bmp.ScanLine[y]; for x:=0 to Bmp.Width-1 do begin R := P[3*x+2]; G := P[3*x+1]; B := P[3*x ]; 现在我将RGB与BGR交换: P[3*x+2] := B; P[3*x+1] := G; P[3*x ] := R; 因此,如果我的图像上有红色,那么它现在是蓝色的,蓝色是红色的.但问题是亮度变化,新图像比源图像更暗或更亮. 解决方法
我建议你先从RGB转换为
HSL.
然后转动 colorwheel(又名Hue,见下文)将红色转换为蓝色并转换回RGB. 这应该保持亮度. 德尔福有一个单位可以做到这一点: 您可以使用: 色调 Hue相当不言自明,从0开始为红色.随着它的价值增加,它会穿过彩虹的颜色.我还没有测试过GraphUtils输出的内容,但是如果一个圆有256度,则值为: >红色0 Embarcadero使用非标准HLS而不是HSL是没有用的,但这就是生命. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |