我有一个处理位图中所有像素的方法(表示为Byte
数组)。对于每个像素,我使用float
对每个R,G和B值进行相当复杂的计算,以存储计算值,直到最终将其转换回Byte
(仅使用强制转换,我和# 39;确定float
中的值始终为255.0或更小。
在尝试优化此方法时,我惊讶地发现大约80%的总处理时间来自于将R,G和B的三个float
值转换为Byte
对应的。
有没有任何超快速的方法(例如):
float Rtotal = 123.7;
float Gtotal = 7.3;
float Btotal = 221.3;
Byte Rsource = (Byte)Rtotal;
Byte Gsource = (Byte)Gtotal;
Byte Bsource = (Byte)Btotal;
答案 0 :(得分:3)
好的,这有点奇怪。如果我只做这个改变:
float Rtotal = 123.7;
float Gtotal = 7.3;
float Btotal = 221.3;
Byte Rsource = (int)Rtotal;
Byte Gsource = (int)Gtotal;
Byte Bsource = (int)Btotal;
施法者(Byte)
造成的额外时间消失了。我的猜测是,编译器正在向(Byte)
强制转换添加某种边界检查以确保它在字节的有效范围内,而如果强制转换为{{1 }}