.net 中Bitmap和Halcon中HObject的相互转换
实际使用时,假如原图8位灰度图,那么BitmapToHObjectBpp8 和BitmapToHObjectBpp24的结果是一样的。而为24位彩色图时,只能用BitmapToHObjectBpp24。
可先得到Bitmap 图的PixelFormat ,而后再进行转换。
以下HObject to Bitmap部分参考:http://blog.csdn.net/miehuo/article/details/48751353
-
private void HObject2Bpp8(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 HObject2Bpp24(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);
-
-
}