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


C# WriteableBitmap.Clone方法代码示例

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


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

示例1: Overlay

 public static WriteableBitmap Overlay(WriteableBitmap bmp, WriteableBitmap overlay, Point location)
 {
     var result = bmp.Clone();
     var size = new Size(overlay.PixelWidth, overlay.PixelHeight);
     result.Blit(new Rect(location, size), overlay, new Rect(new Point(0, 0), size), WriteableBitmapExtensions.BlendMode.Alpha);
     return result;
 }
开发者ID:Narinyir,项目名称:WriteableBitmapEx,代码行数:7,代码来源:MainPage.xaml.cs

示例2: Apply

        /// <summary>
        /// Applies a watermark bitmap and returns a new processed WriteabelBitmap.
        /// </summary>
        /// <param name="input">The input bitmap.</param>
        /// <returns>The result WriteableBitmap with the watermark.</returns>
        public WriteableBitmap Apply(WriteableBitmap input)
        {
            // Resize watermark
            var w = Watermark.PixelWidth;
            var h = Watermark.PixelHeight;
            var ratio = (float)w / h;
            if (ratio > 1)
            {
                w = (int)(input.PixelWidth * RelativeSize);
                h = (int)(w / ratio);
            }
            else
            {
                h = (int)(input.PixelHeight * RelativeSize);
                w = (int)(h * ratio);
            }
            var watermark = Watermark.Resize(w, h, WriteableBitmapExtensions.Interpolation.Bilinear);

            // Blit watermark into copy of the input
            // Bottom right corner
            var result = input.Clone();
            var position = new Rect(input.PixelWidth - w, input.PixelHeight - h, w, h);
            result.Blit(position, watermark, new Rect(0, 0, w, h));

            return result;
        }
开发者ID:kshark27,项目名称:ZuPix,代码行数:31,代码来源:WaterMarker.cs

示例3: Image

 public Image(WriteableBitmap img)
 {
     this.image = img.Clone();
     formatName = "jpg";
     width = img.PixelWidth;
     height = img.PixelHeight;
     //img.Dispatcher.BeginInvoke(() =>
        // {
         destImage = new WriteableBitmap(width, height);
     //});
     updateColorArray();
 }
开发者ID:BharathMG,项目名称:ImageFilterForWindowsPhone,代码行数:12,代码来源:Image.cs

示例4: Octree

        public Octree(WriteableBitmap wbm)
        {
            LoadedBitmap = wbm.Clone();

            InitializeAllLevelsArray();
            GenerateOctreeForBitmap(wbm);

            if(Root != null)
            {
                Root.Parent = null;
            }
        }
开发者ID:gczarnocki,项目名称:raster-paint,代码行数:12,代码来源:Octree.cs

示例5: ApplyYey

        /// <summary>
        /// 画像に遺影を重ねます。
        /// </summary>
        /// <param name="bitmap"></param>
        /// <returns></returns>
        private WriteableBitmap ApplyYey(WriteableBitmap bitmap)
        {
            var wb = bitmap.Clone();
            var file = Application.GetResourceStream(new Uri("photoframe.png", UriKind.Relative));

            var yey = new WriteableBitmap(wb.PixelWidth, wb.PixelHeight);
            yey.LoadJpeg(file.Stream);

            for (int i = 0; i < yey.Pixels.Length; i++)
            {
                var oPx = yey.Pixels[i];
                var a2 = Convert.ToByte((oPx >> 24) & 0xff);
                var ax2 = (double)a2 / 255;

                if (a2 == 0)
                {
                    // 透明なので下地を描画
                }
                else if (a2 == 255)
                {
                    // 不透明なので上に書き込み
                    wb.Pixels[i] = yey.Pixels[i];
                }
                else
                {
                    // 下地の画像の色を取り出す
                    var a = Convert.ToByte((wb.Pixels[i] >> 24) & 0xff);
                    var r = Convert.ToByte((wb.Pixels[i] >> 16) & 0xff);
                    var g = Convert.ToByte((wb.Pixels[i] >> 8) & 0xff);
                    var b = Convert.ToByte((wb.Pixels[i]) & 0xff);
                    // 枠の色を取り出す
                    var r2 = Convert.ToByte((oPx >> 16) & 0xff);
                    var g2 = Convert.ToByte((oPx >> 8) & 0xff);
                    var b2 = Convert.ToByte((oPx) & 0xff);

                    // アルファ値を元に合成
                    var a3 = Convert.ToByte((a * (1.0 - ax2) + a2 * ax2));
                    var r3 = Convert.ToByte((r * (1.0 - ax2) + r2 * ax2));
                    var g3 = Convert.ToByte((g * (1.0 - ax2) + g2 * ax2));
                    var b3 = Convert.ToByte((b * (1.0 - ax2) + b2 * ax2));

                    wb.Pixels[i] = a3 << 24 | r3 << 16 | g3 << 8 | b3;
                }
            }

            wb.Invalidate();
            return wb;
        }
开发者ID:ChiiAyano,项目名称:GoodYeyGenerator,代码行数:53,代码来源:MainPage.xaml.cs

示例6: LoadImage

        public void LoadImage(WriteableBitmap bitmap, Action<WriteableBitmap, short, short> drawer)
        {
            Image.Source = bitmap;
            MinSlider.ValueChanged += (o, e) =>
            {
                drawer(bitmap, (short)MinSlider.Value, (short)MaxSlider.Value);
            };
            MaxSlider.ValueChanged += (o, e) =>
            {
                drawer(bitmap, (short)MinSlider.Value, (short)MaxSlider.Value);
            };
            drawer(bitmap, (short)MinSlider.Value, (short)MaxSlider.Value);
            SaveRangeButton.Click += (o, e) =>
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.AddExtension = true;
                sfd.FileName = DateTime.Now.ToString("ddMMyyhhmm");
                sfd.DefaultExt = "png";
                sfd.Filter = "Image files (*.png)|*.png";
                if (sfd.ShowDialog() == true)
                {
                    for (short i = 1000; i <= 18000; i += 500)
                    {
                        var clone = bitmap.Clone();
                        short from = (short)(i - 1000);
                        short to = i;
                        drawer(clone, from, to);
                        using (FileStream stream5 = new FileStream(System.IO.Path.GetDirectoryName(sfd.FileName) + "\\" + System.IO.Path.GetFileNameWithoutExtension(sfd.FileName) + string.Format("{0}-{1}", from, to) + ".png", FileMode.Create))
                        {
                            PngBitmapEncoder encoder5 = new PngBitmapEncoder();
                            encoder5.Frames.Add(BitmapFrame.Create(clone));
                            encoder5.Save(stream5);
                            stream5.Close();
                        }
                    }

                }
            };
        }
开发者ID:virrkharia,项目名称:dynamight,代码行数:39,代码来源:StillCloseup.xaml.cs

示例7: Grayscare

        /// <summary>
        /// 画像をグレースケールにします。
        /// </summary>
        /// <param name="bitmap"></param>
        /// <returns></returns>
        private WriteableBitmap Grayscare(WriteableBitmap bitmap)
        {
            var edit = bitmap.Clone();

            edit.ToGrayScale();

            return edit;

            //using (var s = PictureExtension.PhotoStreamToMemoryStream(bitmap))
            //{
            //    var size = PictureExtension.GetOriginalSize(s);
            //    WriteableBitmap edit = null;

            //    this.originBitmap = new WriteableBitmap((int)size.Width, (int)size.Height);
            //    edit = new WriteableBitmap((int)size.Width, (int)size.Height);

            //    // WriteableBitmapに画像を読み込ませる
            //    s.Seek(0, SeekOrigin.Begin);
            //    this.originBitmap.LoadJpeg(s);
            //    // editableの方にも同じのをコピー
            //    edit = this.originBitmap.Clone();

            //    // グレスケ化
            //    edit = this.originBitmap.ToGrayScale();

            //    return edit;
            //}
        }
开发者ID:ChiiAyano,项目名称:GoodYeyGenerator,代码行数:33,代码来源:MainPage.xaml.cs

示例8: UniformQuantization

        public static WriteableBitmap UniformQuantization(WriteableBitmap wbm, byte nR, byte nG, byte nB)
        {
            var result = wbm.Clone();

            unsafe
            {
                using (var context = result.GetBitmapContext())
                {
                    for (int i = 0; i < wbm.PixelWidth; i++)
                    {
                        for (int j = 0; j < wbm.PixelHeight; j++)
                        {
                            var c = context.Pixels[j * context.Width + i];
                            byte a = (byte)(c >> 24);

                            // Prevent division by zero
                            int ai = a;
                            if (ai == 0)
                            {
                                ai = 1;
                            }

                            ai = ((255 << 8) / ai);

                            var color = Color.FromArgb(
                                a,
                                (byte)((((c >> 16) & 0xFF) * ai) >> 8),
                                (byte)((((c >> 8) & 0xFF) * ai) >> 8),
                                (byte)((((c & 0xFF) * ai) >> 8)));

                            var r = ReducePixelUq(nR, color.R);
                            var g = ReducePixelUq(nG, color.G);
                            var b = ReducePixelUq(nB, color.B);

                            context.Pixels[j * context.Width + i] = (a << 24) | (r << 16) | (g << 8) | b;
                        }
                    }
                }

                return result;
            }
        }
开发者ID:gczarnocki,项目名称:raster-paint,代码行数:42,代码来源:ColorReduction.cs

示例9: PopularityAlgorithm

        public static WriteableBitmap PopularityAlgorithm(WriteableBitmap wbm, int k)
        {
            var clone = wbm.Clone();

            unsafe
            {
                using (var context = clone.GetBitmapContext())
                {
                    var colorsArray = GetMostPopularColors(context, k).ToArray();

                    if (colorsArray != null)
                    {
                        for (int i = 0; i < context.Width; i++)
                        {
                            for (int j = 0; j < context.Height; j++)
                            {
                                var c = context.Pixels[j * context.Width + i];
                                var a = (byte)(c >> 24);

                                int ai = a;
                                if (ai == 0)
                                {
                                    ai = 1;
                                }

                                ai = ((255 << 8) / ai);
                                var color = Color.FromArgb(a,
                                    (byte)((((c >> 16) & 0xFF) * ai) >> 8),
                                    (byte)((((c >> 8) & 0xFF) * ai) >> 8),
                                    (byte)((((c & 0xFF) * ai) >> 8)));

                                var closestColor = GetTheClosestPixel(color, colorsArray);

                                context.Pixels[j * context.Width + i] = (255 << 24) | (closestColor.R << 16) | (closestColor.G << 8) | closestColor.B;
                            }
                        }
                    }
                }

                return clone;
            }
        }
开发者ID:gczarnocki,项目名称:raster-paint,代码行数:42,代码来源:ColorReduction.cs

示例10: OctreeAlgorithm

        public static WriteableBitmap OctreeAlgorithm(WriteableBitmap wbm, int k)
        {
            var clone = wbm.Clone();

            Octree o = new Octree(clone);

            return o.GenerateBitmapFromOctree(k);
        }
开发者ID:gczarnocki,项目名称:raster-paint,代码行数:8,代码来源:ColorReduction.cs

示例11: RenderWorldFinish

 private void RenderWorldFinish(WriteableBitmap img)
 {
     if (img != null) WorldImage.Image = img.Clone();
     RaisePropertyChanged("WorldZoomedHeight");
     RaisePropertyChanged("WorldZoomedWidth");
     CommandManager.InvalidateRequerySuggested();
 }
开发者ID:Dazmo,项目名称:Terraria-Map-Editor,代码行数:7,代码来源:WorldViewModel.cs

示例12: EraseAllButCertainColor

        /// <summary>
        /// Takes a bitmap whites out all the pixels of a color not of the given color
        /// </summary>
        /// <param name="bitmap">The bitmap to start with</param>
        /// <param name="color">The color to keep</param>
        /// <returns>A bitmap that only has the given color remaining</returns>
        public static WriteableBitmap EraseAllButCertainColor( WriteableBitmap bitmap, Color color )
        {
            int stride = ( bitmap.PixelWidth * bitmap.Format.BitsPerPixel + 7 ) / 8;

             byte[] pixelByteArray = new byte[bitmap.PixelHeight * stride];
             byte[] newPixelByteArray = new byte[bitmap.PixelHeight * stride];
             bitmap.CopyPixels( pixelByteArray, stride, 0 );

             for ( int i = 0; i < bitmap.PixelWidth; i++ )
             {
            for ( int j = 0; j < bitmap.PixelHeight; j++ )
            {
               int index = j * stride + 4 * i;
               if ( GetPixelColor( pixelByteArray, index ) != color )
               {
                  newPixelByteArray[index] = 255;
                  newPixelByteArray[index + 1] = 255;
                  newPixelByteArray[index + 2] = 255;
               }
               else
               {
                  newPixelByteArray[index] = color.B;
                  newPixelByteArray[index + 1] = color.G;
                  newPixelByteArray[index + 2] = color.R;
               }
            }
             }
             var newBitmap = bitmap.Clone();
             newBitmap.WritePixels( new Int32Rect( 0, 0, bitmap.PixelWidth, bitmap.PixelHeight ), newPixelByteArray, stride, 0 );

             return newBitmap;
        }
开发者ID:dmarkachev,项目名称:CSE803Project,代码行数:38,代码来源:BitmapColorer.cs

示例13: Apply

 public WriteableBitmap Apply(WriteableBitmap input)
 {
     int width = this.Watermark.PixelWidth;
     int height = this.Watermark.PixelHeight;
     float num3 = ((float)width) / ((float)height);
     if (num3 > 1f)
     {
         width = (int)(input.PixelWidth * this.RelativeSize);
         height = (int)(((float)width) / num3);
     }
     else
     {
         height = (int)(input.PixelHeight * this.RelativeSize);
         width = (int)(height * num3);
     }
     WriteableBitmap source = this.Watermark.Resize(width, height, WriteableBitmapExtensions.Interpolation.Bilinear);
     WriteableBitmap bmp = input.Clone();
     Rect destRect = new Rect((double)(input.PixelWidth - width), (double)(input.PixelHeight - height), (double)width, (double)height);
     bmp.Blit(destRect, source, new Rect(0.0, 0.0, (double)width, (double)height));
     return bmp;
 }
开发者ID:jashif,项目名称:MangoCameraSample,代码行数:21,代码来源:NewEffects.cs

示例14: GetErodedBitmap

        /// <summary>
        /// Returns a copy of the given bitmap eroded by 1 pixel
        /// </summary>
        /// <param name="bitmap">The bitmap to be eroded</param>
        /// <returns>The eroded bitmap</returns>
        public static WriteableBitmap GetErodedBitmap( WriteableBitmap bitmap )
        {
            int stride = ( bitmap.PixelWidth * bitmap.Format.BitsPerPixel + 7 ) / 8;

             byte[] pixelArray = new byte[bitmap.PixelHeight * stride];
             byte[] newPixelArray = new byte[bitmap.PixelHeight * stride];
             bitmap.CopyPixels( pixelArray, stride, 0 );

             for ( int column = 0; column < bitmap.PixelWidth; column++ )
             {
            for ( int row = 0; row < bitmap.PixelHeight; row++ )
            {
               int index = row * stride + 4 * column;

               // If we are on the boundry just put white in the new image
               if ( column == 0 || row == 0 || column == bitmap.PixelWidth - 1 || row == bitmap.PixelHeight - 1 )
               {
                  newPixelArray[index] = 255;
                  newPixelArray[index + 1] = 255;
                  newPixelArray[index + 2] = 255;
                  continue;
               }

               var currentPixel = Pixel.GetPixel( pixelArray, index );
               var topPixel = Pixel.GetPixel( pixelArray, index - stride );
               var leftPixel = Pixel.GetPixel( pixelArray, index - 4 );
               var rightPixel = Pixel.GetPixel( pixelArray, index + 4 );
               var bottomPixel = Pixel.GetPixel( pixelArray, index + stride );

               // If the current pixel and all of its neighbored pixels are colored (not white), the new pixel is black
               if ( topPixel.Color != Colors.White &&
                    leftPixel.Color != Colors.White &&
                    rightPixel.Color != Colors.White &&
                    bottomPixel.Color != Colors.White &&
                    currentPixel.Color != Colors.White )
               {
                  newPixelArray[index] = 0;
                  newPixelArray[index + 1] = 0;
                  newPixelArray[index + 2] = 0;
               }
               else
               {
                  // Otherwise we make the pixel white
                  newPixelArray[index] = 255;
                  newPixelArray[index + 1] = 255;
                  newPixelArray[index + 2] = 255;
               }
            }
             }
             var erodedBitmap = bitmap.Clone();
             erodedBitmap.WritePixels( new Int32Rect( 0, 0, bitmap.PixelWidth, bitmap.PixelHeight ), newPixelArray, stride, 0 );

             return erodedBitmap;
        }
开发者ID:dmarkachev,项目名称:CSE803Project,代码行数:59,代码来源:BitmapOperations.cs

示例15: ExclusiveOrBitmaps

        /// <summary>
        /// Calculates the differences between the two bitmap and returns a bitmap where those differences
        /// are black and the rest of the bitmap is white
        /// </summary>
        /// <param name="firstBitmap">The first bitmap to compare</param>
        /// <param name="secondBitmap">The second bitmap to compare</param>
        /// <returns>A bitmap where all the black pixels represent where the two bitmaps were different
        /// and the white pixels represent where they were the same</returns>
        private static WriteableBitmap ExclusiveOrBitmaps( WriteableBitmap firstBitmap, WriteableBitmap secondBitmap )
        {
            int stride = ( firstBitmap.PixelWidth * firstBitmap.Format.BitsPerPixel + 7 ) / 8;

             byte[] firstPixelArray = new byte[firstBitmap.PixelHeight * stride];
             byte[] secondPixelArray = new byte[secondBitmap.PixelHeight * stride];
             byte[] ordPixelArray = new byte[secondBitmap.PixelHeight * stride];
             firstBitmap.CopyPixels( firstPixelArray, stride, 0 );
             secondBitmap.CopyPixels( secondPixelArray, stride, 0 );

             for ( int i = 0; i < firstBitmap.PixelWidth; i++ )
             {
            for ( int j = 0; j < firstBitmap.PixelHeight; j++ )
            {
               int index = j * stride + 4 * i;

               var firstBitmapPixel = Pixel.GetPixel( firstPixelArray, index );
               var secondBitmapPixel = Pixel.GetPixel( secondPixelArray, index );

               // If the pixels are the same, they are white in the exclusive or bitmap
               if ( firstBitmapPixel.Color == secondBitmapPixel.Color )
               {
                  ordPixelArray[index] = 255;
                  ordPixelArray[index + 1] = 255;
                  ordPixelArray[index + 2] = 255;
               }
               else
               {
                  // Otherwise black
                  ordPixelArray[index] = 0;
                  ordPixelArray[index + 1] = 0;
                  ordPixelArray[index + 2] = 0;
               }
            }
             }
             var ordBitmap = firstBitmap.Clone();
             ordBitmap.WritePixels( new Int32Rect( 0, 0, firstBitmap.PixelWidth, firstBitmap.PixelHeight ), ordPixelArray, stride, 0 );

             return ordBitmap;
        }
开发者ID:dmarkachev,项目名称:CSE803Project,代码行数:48,代码来源:BitmapOperations.cs


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