【发布时间】:2015-11-11 11:56:44
【问题描述】:
我需要将两个 Bytes 组合成一个 int 值。
我从我的相机收到一个 16 位图像,两个连续的字节具有一个像素的强度值。我的目标是将这两个字节组合成一个“int”值。
我设法使用以下代码做到这一点:
for (int i = 0; i < VectorLength * 2; i = i + 2)
{
NewImageVector[ImagePointer] = ((int)(buffer.Array[i + 1]) << 8) | ((int)(buffer.Array[i]));
ImagePointer++;
}
我的图像是 1280*960 所以 VectorLength==1228800 并且传入的缓冲区大小是 2*1228800=2457600 个元素...
有什么办法可以加快速度吗? 也许还有另一种方法,所以我不需要使用 for 循环。
谢谢
【问题讨论】:
-
.NET 4.5 有一个可能有用的
BitConverter类 -> msdn.microsoft.com/en-us/library/system.bitconverter.aspx -
@nevada_scout
BitConverter做同样的事情,但需要额外的检查,这可能会使其变慢。 -- 但是它确实使用不安全的指针来访问数组元素,这是 OP 可以在这里做的优化。 -
当我说您想将每两个字节对转换为一个短字节(不是整数)时,我说得对吗?所以缓冲区[0]和缓冲区[1]应该进入NewImageVector[0],缓冲区[2]和缓冲区[3]进入NewImageVector[1](等等)?如果是这样,Buffer.BlockCopy 可能是你的朋友。
-
威廉 是的,你是对的。我知道 Buffer.BlockCopy 做了什么,但我怎样才能编辑它来做我想要的呢?有什么建议吗?
-
@Spyros:我会写一个答案。
标签: c# performance byte