Halcon对象Hobject转换为.net对象Bitmap

来源:互联网 发布:网络摄像头平台 编辑:程序博客网 时间:2024/06/12 02:08

好多年不写了,这几天做项目遇到个烦死的问题,大周末的终于解决了。

用Halcon转换成C#时 Hobject对象如何转换成我们认识的Bitmap呢,搞了两天终于好了。

上代码。麻麻再也不用担心我的转换问题了。

private void GenertateGrayBitmap(HObject image, out Bitmap res) {            HTuple hpoint, type, width, height;            const int Alpha = 255;            int[] ptr = new int[2];            HOperatorSet.GetImagePointer1(image, out hpoint, out type, out width, out height);            res = new Bitmap(width, height, PixelFormat.Format8bppIndexed);            ColorPalette pal = res.Palette;            for (int i = 0; i <= 255; i++)            {                pal.Entries[i] = Color.FromArgb(Alpha, i, i, i);            }            res.Palette = pal;            Rectangle rect = new Rectangle(0, 0, width, height);            BitmapData bitmapData = res.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);            int PixelSize = Bitmap.GetPixelFormatSize(bitmapData.PixelFormat) / 8;            ptr[0] = bitmapData.Scan0.ToInt32();            ptr[1] = hpoint.I;            if (width % 4 == 0)                CopyMemory(ptr[0], ptr[1], width * height * PixelSize);            else            {                for (int i = 0; i < height - 1; i++)                {                    ptr[1] += width;                    CopyMemory(ptr[0], ptr[1], width * PixelSize);                    ptr[0] += bitmapData.Stride;                }            }            res.UnlockBits(bitmapData);        }        private void GenertateRGBBitmap(HObject image, out Bitmap res)        {            HTuple hred, hgreen, hblue, type, width, height;            HOperatorSet.GetImagePointer3(image, out hred, out hgreen, out hblue, out type, out width, out height);            res = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);            Rectangle rect = new Rectangle(0, 0, width, height);            BitmapData bitmapData = res.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);            unsafe            {                byte* bptr = (byte*)bitmapData.Scan0;                byte* r = ((byte*)hred.I);                byte* g = ((byte*)hgreen.I);                byte* b = ((byte*)hblue.I);                for (int i = 0; i < width * height; i++)                {                    bptr[i * 4] = (b)[i];                    bptr[i * 4 + 1] = (g)[i];                    bptr[i * 4 + 2] = (r)[i];                    bptr[i * 4 + 3] = 255;                }            }            res.UnlockBits(bitmapData);        }


1 1
原创粉丝点击