void LoadDefaultImage()
        {
            Assembly asm = typeof(Crop).Assembly;

            using (Stream stream = asm.GetManifestResourceStream("BitmapSamples.Resources.GrapeCity.jpg"))
            {
                _bitmap.Load(stream, new FormatConverter(PixelFormat.Format32bppPBGRA));
            }
            image.Source     = _bitmap.ToWriteableBitmap();
            imageGrid.Width  = _bitmap.PixelWidth;
            imageGrid.Height = _bitmap.PixelHeight;
            InitSelection();
        }
예제 #2
0
        void OnDragCompleted(object sender, C1DragCompletedEventArgs e)
        {
            imageGrid.Children.Remove(_line);
            var start = new Point(_position.X + e.CumulativeTranslation.X, _position.Y + e.CumulativeTranslation.Y);
            var end   = _position;

            var w = image.ActualWidth;
            var h = image.ActualHeight;

            _warpStart = new Point2F((float)(start.X / w), (float)(start.Y / h));
            _warpEnd   = new Point2F((float)(end.X / w), (float)(end.Y / h));

            UpdateImageSource();
            image.Source = _bitmap.ToWriteableBitmap();
        }
예제 #3
0
 void UpdateImage()
 {
     image.Source     = _bitmap.ToWriteableBitmap();
     imageGrid.Width  = _bitmap.PixelWidth;
     imageGrid.Height = _bitmap.PixelHeight;
     InitSelection();
 }
예제 #4
0
        void UpdateImageSource(ImageEffect imageEffect)
        {
            // some effects can change pixels outside the bounds of the source
            // image, so we need a margin to make those pixels visible
            var targetOffset = new Point2F(_marginLT, _marginLT);
            int w            = _bitmap.PixelWidth + _marginLT + _marginRB;
            int h            = _bitmap.PixelHeight + _marginLT + _marginRB;

            // the render target object
            var rt = _d2dContext;

            // create the target Direct2D bitmap
            var bpTarget = new D2D.BitmapProperties1(
                new D2D.PixelFormat(DXGI.Format.B8G8R8A8_UNorm, D2D.AlphaMode.Premultiplied),
                (float)_bitmap.DpiX, (float)_bitmap.DpiY, D2D.BitmapOptions.Target | D2D.BitmapOptions.CannotDraw);
            var targetBmp = D2D.Bitmap1.Create(rt, new Size2L(w, h), bpTarget);

            // associate the target bitmap with render target
            rt.SetTarget(targetBmp);

            // start drawing
            rt.BeginDraw();

            // clear the target bitmap
            rt.Clear(null);

            // convert C1Bitmap image to Direct2D image
            var d2dBitmap = _bitmap.ToD2DBitmap1(rt, D2D.BitmapOptions.None);

            // apply the effect or just draw the original image
            switch (imageEffect)
            {
            case ImageEffect.Original:
                rt.DrawImage(d2dBitmap, targetOffset);
                break;

            case ImageEffect.GaussianBlur:
                rt.DrawImage(ApplyGaussianBlur(d2dBitmap), targetOffset);
                break;

            case ImageEffect.Sharpen:
                rt.DrawImage(ApplySharpen(d2dBitmap), targetOffset);
                break;

            case ImageEffect.HorizontalSmear:
                rt.DrawImage(ApplyHorizontalSmear(d2dBitmap), targetOffset);
                break;

            case ImageEffect.Shadow:
                rt.DrawImage(ApplyShadow(d2dBitmap), targetOffset);
                break;

            case ImageEffect.DisplacementMap:
                rt.DrawImage(ApplyDisplacementMap(d2dBitmap), targetOffset);
                break;

            case ImageEffect.Emboss:
                rt.DrawImage(ApplyEmboss(d2dBitmap), targetOffset);
                break;

            case ImageEffect.EdgeDetect:
                rt.DrawImage(ApplyEdgeDetect(d2dBitmap), targetOffset);
                break;

            case ImageEffect.Sepia:
                rt.DrawImage(ApplySepia(d2dBitmap), targetOffset);
                break;
            }
            d2dBitmap.Dispose();

            // draw the text label in case of the Shadow effect
            if (imageEffect == ImageEffect.Shadow)
            {
                var mr = Matrix3x2.Rotation(-90f);
                var mt = Matrix3x2.Translation(targetOffset.X + 6f, targetOffset.Y + 344f);
                rt.Transform = mr * mt;
                _brush.SetColor(ColorF.White);
                rt.DrawTextLayout(new Point2F(-1f, -1f), _textLayout, _brush);
                _brush.SetColor(ColorF.DimGray);
                rt.DrawTextLayout(Point2F.Empty, _textLayout, _brush);
                rt.Transform = Matrix3x2.Identity;
            }

            // finish drawing (all drawing commands are executed at that moment)
            if (!rt.EndDraw(true))
            {
                targetBmp.Dispose();

                // try to recreate the device resources if the old GPU device was removed
                DiscardDeviceResources();
                CreateDeviceResources();
                return;
            }

            // detach the target bitmap
            rt.SetTarget(null);

            // create a temporary C1Bitmap object
            var outBitmap = new C1Bitmap(_bitmap.ImagingFactory);

            // import the image from Direct2D target bitmap to C1Bitmap
            outBitmap.Import(targetBmp, rt, new RectL(w, h));
            targetBmp.Dispose();

            // convert C1Bitmap to a WriteableBitmap, then use it as an image source
            image.Source = outBitmap.ToWriteableBitmap();
            outBitmap.Dispose();
        }