【发布时间】:2018-05-26 20:49:00
【问题描述】:
public void accessHi3DRange(buffer)
{
double meanR = 0;
uint sumR = 0;
uint countR = 0;
int numberOfScansR = buffer.Height;
bitmapHeight = numberOfScansR;
int subCompWidth = buffer.Components["Hi3D 1"].SubComponents["Range"].Format.Width;
bitmapWidth = subCompWidth;
ushort[,] data = buffer.Components["Hi3D 1"].SubComponents["Range"].GetRows<ushort>(0, numberOfScansR);
for (int scan = 0; scan < numberOfScansR; scan++)
{
for (int col = 0; col < subCompWidth; col++)
{
ushort val = data[scan, col];
if (val != 0)
{
sumR += val;
drawPix(col, scan, (int)val, (int)val, (int)val);
countR++;
}
}
}
}
private void drawPix(int x, int y, int r, int g, int b)
{
((Bitmap)pictureBox1.Image).SetPixel(x, y, Color.FromArgb(r, g, b));
return;
}
当我运行我得到的代码时
System.ArgumentException:'655' 的值对'red' 无效。 'red' 应大于或等于 0 且小于或等于 255。'
所以要解决这个错误,我想将ushort 值转换为byte 以便它可以显示在图片框中。
如果是这样,我该如何转换?
【问题讨论】:
-
byte是一种较小的数据类型 - 8 位 - 而ushort是 16 位。您无法在不丢失数据的情况下将ushort转换为byte。 -
您是否尝试从 16 位图像中读取?我认为您想显示为 24 位 RGB(对一个像素使用 3 个字节(字节 1 = 红色,字节 2 = 绿色,字节 3 = 蓝色)?最好提供一些输入文件的链接来测试这一点。看看
public void accessHi3DRange(buffer)所以buffer的内容是什么?如何测试你的代码?...@Jiexian
标签: c# image image-processing byte ushort