现在的位置: 首页 > 综合 > 正文

BitmapSourceAndBitmap

2014年02月08日 ⁄ 综合 ⁄ 共 2620字 ⁄ 字号 评论关闭

 private void convertBitmapToBitmapSource_Click(object sender, EventArgs e)
        {
            using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap("bitmap_to_bitmapsource.jpg"))
            {
                System.Windows.Media.Imaging.BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                    bitmap.GetHbitmap(),
                    IntPtr.Zero,
                    Int32Rect.Empty,
                    System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

                image.Source = bitmapSource;
            }
        }

        private void convertBitmapSourceToBitmap_Click(object sender, EventArgs e)
        {
            using(Stream stm = File.Open("bitmapsource_to_bitmap.jpg", FileMode.Open, FileAccess.Read))
            {
                // Since we're not specifying a System.Windows.Media.Imaging.BitmapCacheOption, the pixel format
                // will be System.Windows.Media.PixelFormats.Pbgra32.
                System.Windows.Media.Imaging.BitmapSource bitmapSource = System.Windows.Media.Imaging.BitmapFrame.Create(
                    stm,
                    System.Windows.Media.Imaging.BitmapCreateOptions.None,
                    System.Windows.Media.Imaging.BitmapCacheOption.OnLoad);

                // Scale the image so that it will display similarly to the WPF Image.
                double newWidthRatio = picture.Width / (double)bitmapSource.PixelWidth;
                double newHeightRatio = ((picture.Width * bitmapSource.PixelHeight) / (double)bitmapSource.PixelWidth) / (double)bitmapSource.PixelHeight;

                System.Windows.Media.Imaging.BitmapSource transformedBitmapSource = new System.Windows.Media.Imaging.TransformedBitmap(
                    bitmapSource,
                    new System.Windows.Media.ScaleTransform(newWidthRatio, newHeightRatio));

                int width = transformedBitmapSource.PixelWidth;
                int height = transformedBitmapSource.PixelHeight;
                int stride = width * ((transformedBitmapSource.Format.BitsPerPixel + 7) / 8);

                byte[] bits = new byte[height * stride];

                transformedBitmapSource.CopyPixels(bits, stride, 0);

                unsafe
                {
                    fixed (byte* pBits = bits)
                    {
                        IntPtr ptr = new IntPtr(pBits);

                        System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(
                            width,
                            height,
                            stride,
                            System.Drawing.Imaging.PixelFormat.Format32bppPArgb,
                            ptr);

                        picture.Image = bitmap;
                    }
                }
            }
        }

抱歉!评论已关闭.