C#与halcon联合编程 HObject转Bitmap

        // halcon rgb变量转C# bitmap变量        
        public static Bitmap HObject2Bitmap3(HObject ho) 
        {
            Bitmap bimp = null;
 
            HTuple hred, hgreen, hblue, type, width, height;
            HOperatorSet.GetImagePointer3(ho, out hred, out hgreen, out hblue, out type, out width, out height);
            bimp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
            Rectangle rect = new Rectangle(0, 0, width, height);
            BitmapData bitmapData = bimp.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;
                }
            }
            bimp.UnlockBits(bitmapData);
            return bimp;
        }
 
 
 
 
        // halcon gray变量转C# bitmap变量
        public static Bitmap HObject2Bitmap(HObject ho)
        {
            try
            {
                HTuple type, width, height, pointer;
                //HOperatorSet.AccessChannel(ho, out ho, 1);
                HOperatorSet.GetImagePointer1(ho, out pointer, out type, out width, out height);
                //himg.GetImagePointer1(out type, out width, out height);
 
                Bitmap bmp = new Bitmap(width.I, height.I, PixelFormat.Format8bppIndexed);
                ColorPalette pal = bmp.Palette;
                for (int i = 0; i <= 255; i++)
                {
                    pal.Entries[i] = Color.FromArgb(255, i, i, i);
                }
                bmp.Palette = pal;
                BitmapData bitmapData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);
                int PixelSize = Bitmap.GetPixelFormatSize(bitmapData.PixelFormat) / 8;
                int stride = bitmapData.Stride;
                int ptr = bitmapData.Scan0.ToInt32();
                for (int i = 0; i < height; i++)
                {
                    CopyMemory(ptr, pointer, width * PixelSize);
                    pointer += width;
                    ptr += bitmapData.Stride;
                }
 
                bmp.UnlockBits(bitmapData);
                return bmp;
            }
            catch (Exception exc)
            {
                return null;
            }
        }
 
 
        // C# bitmap变量转为 halcon变量
        public static HObject Bitmap2HObject(Bitmap bmp)
        {
            try
            {
 
                Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
 
                System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
                IntPtr pointer = bmpData.Scan0;
 
                byte[] dataBlue = new byte[bmp.Width * bmp.Height];
                unsafe
                {
                    fixed (byte* ptrdata = dataBlue)
                    {
                        for (int i = 0; i < bmp.Height; i++)
                        {
                            CopyMemory((int)(ptrdata + bmp.Width * i), (int)(pointer + bmpData.Stride * i), bmp.Width);
                        }
                        HObject ho;
                        HOperatorSet.GenImage1(out ho, "byte", bmp.Width, bmp.Height, (int)ptrdata);
                        HImage himg = new HImage("byte", bmp.Width, bmp.Height, (IntPtr)ptrdata);
 
                        //HOperatorSet.DispImage(ho, hWindowControl1.HalconWindow);
 
                        bmp.UnlockBits(bmpData);
                        return ho;
                    }
                }
            }
            catch (Exception exc)
            {
                return null;
            }
 
        }

 

你可能感兴趣的:(C#,Halcon)