Subversion Repositories Projects

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media.Imaging;
using WindowsPoint = System.Windows.Point;
using DrawingPoint = System.Drawing.Point;

namespace Touchless.Shared.Extensions
{
    public static class Extensions
    {
        public static IEnumerable<T> ForEach<T>(this IEnumerable<T> items, Action<T> action)
        {
            foreach (T item in items)
            {
                action(item);
            }

            return items;
        }

        public static void IfNotNull<T>(this T item, Action<T> action)
        {
            if (item != null)
            {
                action(item);
            }
        }

        public static WindowsPoint ToWindowsPoint(this DrawingPoint p)
        {
            return new WindowsPoint
                       {
                           X = p.X,
                           Y = p.Y
                       };
        }

        public static DrawingPoint ToDrawingPoint(this WindowsPoint p)
        {
            return new DrawingPoint
                       {
                           X = (int) p.X,
                           Y = (int) p.Y
                       };
        }

        [DllImport("gdi32")]
        private static extern int DeleteObject(IntPtr o);

        public static BitmapSource ToBitmapSource(this Bitmap source)
        {
            BitmapSource bs = null;

            IntPtr ip = source.GetHbitmap();
            try
            {
                bs = Imaging.CreateBitmapSourceFromHBitmap(ip, IntPtr.Zero, Int32Rect.Empty,
                                                           BitmapSizeOptions.FromEmptyOptions());
            }
            finally
            {
                DeleteObject(ip);
            }

            return bs;
        }
    }
}