如题,提供深度图像转彩色图像功能,使用方法如下:
1.首先引用LmiColorMap.dll然后添加命名空间:
2.然后在回调函数中使用下面的代码:
- public void GenHeightImageFromPtr(IntPtr ptData,long nWidth, long nHeight, ImageHeightInfo imgInfo)
- {
- //获取灰度彩色值
- ushort[] ZValues = new ushort[buff.Length];
- for (int k = 0; k < buff.Length; k++)
- ZValues[k] = (ushort)(buff[k] - short.MinValue);
- }
- ColorMaps MapColor = new ColorMaps();
- ushort minValue = 0, maxValue = 0;
- MapColor.FindMinMaxForColor(ZValues, (UInt32)buff.Length, 0, ref minValue, ref maxValue);
- Color[] colors = new Color[buff.Length];
- MapColor.ToColors(ZValues, minValue, maxValue, 0, ref colors, (UInt32)buff.Length);
- int Width = (int)nWidth;
- int Height = (int)nHeight;
- Bitmap Bimage = new Bitmap(Width, Height);
- BitmapData bmdata = Bimage.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
- IntPtr intptr = bmdata.Scan0;
- byte[] Pixlemaps = new byte[bmdata.Width * bmdata.Height*3];
- //int offset = bmdata.Width*3 - bmdata.Width * 3;
- unsafe
- {
- byte* pp = (byte*)(void*)bmdata.Scan0;
- for (int k = 0; k < bmdata.Height; k++)
- {
- for (int m = 0; m < bmdata.Width; m++)
- {
- pp[0] = (byte)(colors[k * bmdata.Width + m].R);
- pp[1] = (byte)(colors[k * bmdata.Width + m].G);
- pp[2] = (byte)(colors[k * bmdata.Width + m].B);
- pp += 3;
- }
- //pp += bmdata.Width*3 - bmdata.Width * 3;
- }
- }
- m_objImage.Dispose();
- HOperatorSet.GenImageInterleaved(out m_objImage, intptr, "rgb", Width, Height, 0, "byte", Width, Height, 0, 0, -1, 0);
- HOperatorSet.ZoomImageFactor(m_objImage, out m_objImage, 1.0, imgHeightInfo.m_nRes_Y / imgHeightInfo.m_nRes_X, "constant");
- Bimage.UnlockBits(bmdata);
- }
复制代码
这段代码是利用Halcon生成彩色图像的,然后赋值给m_objImage对象,其中unsafe这段代码需要开启C#的不安全代码运行(见下图);
由于上面已经产生了bmp图像了,也可以直接保存bmp图像!
购买主题
已有 1 人购买
本主题需向作者支付 10 视觉币 才能浏览
|