当前位置: 首页>>代码示例>>C#>>正文


C# FormatConvertedBitmap.Freeze方法代码示例

本文整理汇总了C#中System.Windows.Media.Imaging.FormatConvertedBitmap.Freeze方法的典型用法代码示例。如果您正苦于以下问题:C# FormatConvertedBitmap.Freeze方法的具体用法?C# FormatConvertedBitmap.Freeze怎么用?C# FormatConvertedBitmap.Freeze使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在System.Windows.Media.Imaging.FormatConvertedBitmap的用法示例。


在下文中一共展示了FormatConvertedBitmap.Freeze方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: ToGdiBitmap

        public static Bitmap ToGdiBitmap(BitmapSource bmp)
        {
            // below code refernces blog entry by luche:
            // http://www.ruche-home.net/%A4%DC%A4%E4%A4%AD%A4%B4%A4%C8/2011-08-02/CopyPixels%20%A5%E1%A5%BD%A5%C3%A5%C9%A4%F2%CD%D1%A4%A4%A4%BF%20WPF%20BitmapSource%20%A4%AB%A4%E9%20GDI%20Bitmap%20%A4%D8%A4%CE%CA%D1%B4%B9

            if (bmp.Format != PixelFormats.Bgra32)
            {
                // convert format
                bmp = new FormatConvertedBitmap(bmp,
                    PixelFormats.Bgra32, null, 0);
                bmp.Freeze();
            }

            // prepare values
            var width = (int)bmp.Width;
            var height = (int)bmp.Height;
            var stride = width * 4;

            // prepare buffer
            var buffer = new byte[stride * height];

            // copy to byte array
            bmp.CopyPixels(buffer, stride, 0);

            // create bitmap
            var result = new Bitmap(width, height, SDI::PixelFormat.Format32bppArgb);

            // set bitmap content
            try
            {
                // locking bits
                SDI::BitmapData bd = null;
                try
                {
                    bd = result.LockBits(new Rectangle(0, 0, width, height),
                        SDI::ImageLockMode.WriteOnly, SDI::PixelFormat.Format32bppArgb);
                    Marshal.Copy(buffer, 0, bd.Scan0, buffer.Length);
                }
                finally
                {
                    if (bd != null)
                    {
                        result.UnlockBits(bd);
                    }
                }
            }
            catch
            {
                result.Dispose();
                throw;
            }

            return result;
        }
开发者ID:Kei-Nanigashi,项目名称:StarryEyes,代码行数:54,代码来源:ImageInterop.cs

示例2: GetImageColorForBackgroundAsync

        /// <summary>
        /// 从图片中获取背景颜色
        /// </summary>
        /// <param name="image">图片</param>
        /// <param name="callback">计算完成后调用的委托</param>
        public static void GetImageColorForBackgroundAsync(BitmapSource image, ComputeCompleteCallback callback)
        {
            FormatConvertedBitmap bitmap = null;
            const int bytesPerPixel = 3;
            byte[] pixels = null;
            int width = 0;
            int height = 0;
            bool isFrozen = image.IsFrozen;
            if (!isFrozen)
            {
                //由于image没有冻结,所以image不能跨线程使用,这时要在当前线程中将image转换为另一个位图
                bitmap = new FormatConvertedBitmap(image, PixelFormats.Rgb24, BitmapPalettes.WebPalette, 0);
                if (bitmap.CanFreeze) bitmap.Freeze();
                pixels = new byte[bitmap.PixelHeight * bitmap.PixelWidth * bytesPerPixel];
                bitmap.CopyPixels(pixels, bitmap.PixelWidth * bytesPerPixel, 0);
                width = bitmap.PixelWidth;
                height = bitmap.PixelHeight;
            }
            ThreadPool.QueueUserWorkItem(new WaitCallback((state) =>
            {
                if (isFrozen)
                {
                    //由于image已经冻结,所以image可以跨线程使用,这时在新线程中将image转换为另一个位图
                    bitmap = new FormatConvertedBitmap(image, PixelFormats.Rgb24, BitmapPalettes.WebPalette, 0);
                    if (bitmap.CanFreeze) bitmap.Freeze();
                    pixels = new byte[bitmap.PixelHeight * bitmap.PixelWidth * bytesPerPixel];
                    bitmap.CopyPixels(pixels, bitmap.PixelWidth * bytesPerPixel, 0);
                    width = bitmap.PixelWidth;
                    height = bitmap.PixelHeight;
                }

                //计算颜色的均值
                int sum = width * height;
                int r = 0, g = 0, b = 0;
                int offset = 0;
                for (int i = 0; i < height; i++)
                {
                    for (int j = 0; j < width; j++)
                    {
                        r += pixels[offset++];
                        g += pixels[offset++];
                        b += pixels[offset++];
                    }
                }
                r = r / sum;
                g = g / sum;
                b = b / sum;
                Color color1 = Color.FromRgb((byte)r, (byte)g, (byte)b);

                //计算图片右部的颜色均值
                r = 0; g = 0; b = 0;
                int jstart = (int)(width * (1 - RightSideWidth));
                sum = (width - jstart) * width;
                for (int i = 0; i < height; i++)
                {
                    for (int j = jstart; j < width; j++)
                    {
                        r += pixels[(i * width + j) * bytesPerPixel + 0];
                        g += pixels[(i * width + j) * bytesPerPixel + 1];
                        b += pixels[(i * width + j) * bytesPerPixel + 2];
                    }
                }
                r = r / sum;
                g = g / sum;
                b = b / sum;
                Color color2 = Color.FromRgb((byte)r, (byte)g, (byte)b);

                //根据上面计算出来的两个颜色计算最终颜色
                HSLColor hsl1 = new HSLColor(color1);
                HSLColor hsl2 = new HSLColor(color2);
                hsl1.Hue += 10;
                if (IsNotSaturateEnough(hsl1) && !IsAlmostZeroSaturation(hsl1))
                    hsl1.Saturation += 0.2;
                callback(Revise(hsl1, hsl2).ToRGB());
            }));
        }
开发者ID:nick121212,项目名称:xima_desktop3,代码行数:81,代码来源:ColorUntil.cs

示例3: Capture

        /// キャプチャしたHBitmapをBitmapSource(Freezed)にして返す
        /// @param request スクリーンキャプチャ設定をまとめたリクエスト
        /// @return スクリーンキャプチャ結果が格納されたBitmapSource
        private BitmapSource Capture(ScreenCaptureRequest request)
        {
            if (request.ClippingWidth <= 0 || request.ClippingHeight <= 0) {
              // Debug.WriteLine("Invalid clipping size", "ScreenCaptureTimer.CaptureByGetDIBits");
              return null;
            }

            // HBitmapからBitmapSourceを作成
            BitmapSource bitmap = null;
            using (var result = request.Execute()) {
              if (result == null) return bitmap;

              // HBitmapからBitmapSourceに変換
              bitmap = Imaging.CreateBitmapSourceFromHBitmap(
              result.Bitmap, IntPtr.Zero, Int32Rect.Empty,
              BitmapSizeOptions.FromEmptyOptions());

              // Debug.WriteLine(string.Format("Captured: {0:D}x{1:D}",
              //                 bitmap.PixelWidth, bitmap.PixelHeight),
              //                 "ScreenCapture");
            }

            // Alphaチャンネル情報を削除
            bitmap = new FormatConvertedBitmap(bitmap, PixelFormats.Bgr32, null, 0.0);

            /// @todo(me) あまり大きな画像をメモリにおいておきたくない。
            ///           とはいえ、TransformedBitmapはちょっと重過ぎる。
            ///           メモリよりもCPUリソースを残しておきたいのでこのままでいいかも。
            //bitmap = this.Resize(bitmap);

            // スレッド越しにアクセスされるためFreeze
            bitmap.Freeze();
            return bitmap;
        }
开发者ID:JERUKA9,项目名称:SCFF-DirectShow-Filter,代码行数:37,代码来源:ScreenCaptureTimer.cs

示例4: GetImageColorForBackground

        /// <summary>
        /// 从图片中获取背景颜色
        /// </summary>
        /// <param name="bitmap">图片</param>
        public static Color GetImageColorForBackground(FormatConvertedBitmap bitmap)
        {
            const int bytesPerPixel = 3;

            if (bitmap.CanFreeze) bitmap.Freeze();
            var pixels = new byte[bitmap.PixelHeight * bitmap.PixelWidth * bytesPerPixel];
            bitmap.CopyPixels(pixels, bitmap.PixelWidth * bytesPerPixel, 0);
            var width = bitmap.PixelWidth;
            var height = bitmap.PixelHeight;
            
            //计算颜色的均值
            Color color = GetColorOfRegion(pixels, width, height, 0, width, 0, height);

            var hsl = new HslColor(color);
            if (IsNotSaturateEnough(hsl) && !IsAlmostZeroSaturation(hsl))
                hsl.Saturation += 0.2;

            return Revise(hsl).ToRgb();
        }
开发者ID:tiger2soft,项目名称:K.F.Storm,代码行数:23,代码来源:ColorFunctions.cs

示例5: ConvertToBgra32

 private BitmapSource ConvertToBgra32(BitmapSource src)
 {
     if (src.Format == PixelFormats.Bgra32) return src;
     var s = new FormatConvertedBitmap(
             src,
             PixelFormats.Bgra32,
             null,
             0);
     s.Freeze();
     return s;
 }
开发者ID:mitim,项目名称:sps,代码行数:11,代码来源:Photo.cs


注:本文中的System.Windows.Media.Imaging.FormatConvertedBitmap.Freeze方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。