[2011年12月1日] UnmangedImage类

13 篇文章 0 订阅
10 篇文章 1 订阅

以下为类的方法概览,方法摘要里标注[OK]的是效率已经超过调用OpenCV(使用Emgu 2.3版本)的,未标注的速度慢于OpenCV,标注[??]的尚未进行测试。

代码下载地址:http://download.csdn.net/detail/wmesci/3868534

namespace wmesci.Images
{
    /// <summary>像素格式</summary>
    public enum PixelFormat { GRAY, BGR, RGB }

    /// <summary>非托管图像类</summary>
    public unsafe class UnmanagedImage : IDisposable
    {
        public UnmanagedImage(int width, int height, PixelFormat pf)

        public UnmanagedImage(int width, int height, PixelFormat pf, byte* data)

        public UnmanagedImage(Bitmap bmp)

        public UnmanagedImage(string filename)

        /// <summary>将图像数据复制到指定的位置</summary>
        public void CopyTo(void* dst)

        /// <summary>使用指定的数据源填充图像</summary>
        public void SetValue(byte* src)

        /// <summary>将当前图像填充为参数所表示的颜色,参数数组大小必须和像素大小一致</summary>
        public void SetValue(params byte[] value)

        /// <summary>图像像素宽度</summary>
        public readonly int Width;

        /// <summary>图像像素高度</summary>
        public readonly int Height;

        /// <summary>图像所占内存大小</summary>
        public readonly int Length;

        /// <summary>扫描跨度(每行字节数,4字节向上对齐)</summary>
        public readonly int Stride;

        /// <summary>图像像素格式</summary>
        public readonly PixelFormat PixelFormat;

        /// <summary>每个像素所占字节数</summary>
        public readonly int PixelSize;

        /// <summary>图像数据地址</summary>
        public byte* Pointer { get; private set; }

        /// <summary>返回当前图像的一份副本</summary>
        public UnmanagedImage Clone()

        /// <summary>转换为Bitmap</summary>
        public Bitmap ToBitmap()

        /// <summary>转换为Bitmap</summary>
        public Bitmap Bitmap { get; }

        /// <summary>[??]转换像素格式</summary>
        public static void Convert(UnmanagedImage img, UnmanagedImage dst)

        /// <summary>[OK]非运算:dst = ~img</summary>
        public static void Not(UnmanagedImage img, UnmanagedImage dst)

        /// <summary>[OK]与运算:dst = img1 & img2</summary>
        public static void And(UnmanagedImage img1, UnmanagedImage img2, UnmanagedImage dst)

        /// <summary>[OK]与运算:dst = img1 & value</summary>
        public static void And(UnmanagedImage img, byte[] value, UnmanagedImage dst)

        /// <summary>[OK]或运算:dst = img1 | img2</summary>
        public static void Or(UnmanagedImage img1, UnmanagedImage img2, UnmanagedImage dst)

        /// <summary>[OK]或运算:dst = img1 | value</summary>
        public static void Or(UnmanagedImage img, byte[] value, UnmanagedImage dst)

        /// <summary>[OK]异  或:dst = img1 ^ img2</summary>
        public static void Xor(UnmanagedImage img1, UnmanagedImage img2, UnmanagedImage dst)

        /// <summary>[OK]相  加:dst = img1 + img2</summary>
        public static void Add(UnmanagedImage img1, UnmanagedImage img2, UnmanagedImage dst)

        /// <summary>[OK]相  加:dst = img1 + value</summary>
        public static void Add(UnmanagedImage img1, byte[] value, UnmanagedImage dst)

        /// <summary>[OK]相  减:dst = img1 - img2</summary>
        public static void Sub(UnmanagedImage img1, UnmanagedImage img2, UnmanagedImage dst)

        /// <summary>[OK]相  减:dst = img1 - value</summary>
        public static void Sub(UnmanagedImage img1, byte[] value, UnmanagedImage dst)

        /// <summary>[OK]乘  积:dst = img1 * img2</summary>
        public static void Mul(UnmanagedImage img1, UnmanagedImage img2, double scale, UnmanagedImage dst)

        /// <summary>[OK]乘  积:dst = img1 * scale</summary>
        public static void Mul(UnmanagedImage img1, double scale, UnmanagedImage dst)

        /// <summary>[  ]阈值化:dst = img < threshold ? Min : Max</summary>
        public static void Threshold(UnmanagedImage img, byte threshold, UnmanagedImage dst)

        /// <summary>[OK]加权和:dst = a * img1 + b * img2</summary>
        public static void AddWeighted(UnmanagedImage img1, double a, UnmanagedImage img2, double b, UnmanagedImage dst)

        /// <summary>[  ]均值滤波:dst = 其周围半径n范围内的像素值的平均数</summary>
        public static void Smooth(UnmanagedImage img, UnmanagedImage dst, int w, int h)

        /// <summary>[??]翻转源图像</summary>
        public static void Flip(UnmanagedImage img, UnmanagedImage dst, bool flipx, bool flipy)

        /// <summary>[??]调整图像大小,使用双线性插值</summary>
        public static void Resize(UnmanagedImage img, UnmanagedImage dst)

        /// <summary>释放资源</summary>
        public void Dispose()
    }
}


    2011.11.28更新:

        1、添加And、Or、Not、Xor4个方法。

    2011.11.29更新:

        1、增加对彩色图像的支持。

    2011.12.1更新:

        1、为And、Or、Add、Sub、Mul添加一个和常量进行运算的重载。

        2、添加两个方法:Flip、Resize。

        3、Convert方法改为静态方法,以避免在不需要的时候重复创建对象。

        4、ToBitmap方法现在只会创建一个Bitmap对象,以后再调用时会将图像数据复制到这个Bitmap里然后直接返回,避免重复创建对象,提高效率。


注:没有考虑多线程使用的情况下的线程同步问题,如有需要请自己做。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值