Esempio n. 1
0
        //创建直方图
        private void DrawHistogram(CanvasDrawingSession drawingSession, Size size, EffectChannelSelect channelSelect, CanvasLinearGradientBrush brush)
        {
            int         binCount   = (int)CanvasControl.ActualWidth; //256;//矩形数量
            const float graphPower = 0.25f;                          // 非线性规模使得图更清楚地显示微小的变化。

            try
            {
                float[] histogram = CanvasImage.ComputeHistogram(App.Model.MainRenderTarget, App.Model.MainRenderTarget.Bounds, drawingSession, channelSelect, binCount);

                var w = (float)size.Width / binCount;
                var h = (float)size.Height;

                for (int i = 0; i < binCount; i++)
                {
                    var x = i * w;
                    var y = (1 - (float)Math.Pow(histogram[i], graphPower)) * h;

                    brush.StartPoint = new Vector2(x, y);
                    brush.EndPoint   = new Vector2(x, h);

                    drawingSession.FillRectangle(x, y, w, h - y, brush);
                }
            }
            catch (Exception)  {  }
        }
Esempio n. 2
0
        //置换贴图
        public static ICanvasImage GetDisplacementMap(ICanvasImage canvasImage, ICanvasImage source, float Amount,
                                                      EffectChannelSelect XChannelSelect = EffectChannelSelect.Red,
                                                      EffectChannelSelect YChannelSelect = EffectChannelSelect.Green)
        {
            return(new DisplacementMapEffect//取代一个输入图像的像素强度值的第二个图片。
            {
                Source = canvasImage,
                Displacement = source,

                XChannelSelect = XChannelSelect,
                YChannelSelect = YChannelSelect,

                Amount = Amount
            });
        }
Esempio n. 3
0
        void DrawHistogram(CanvasDrawingSession drawingSession, Size size, EffectChannelSelect channelSelect, CanvasLinearGradientBrush brush)
        {
            const int   binCount   = 64;
            const float graphPower = 0.25f; // Nonlinear scale makes the graph show small changes more clearly.

            float[] histogram = CanvasImage.ComputeHistogram(hueEffect, bitmap.Bounds, drawingSession, channelSelect, binCount);

            var w = (float)size.Width / binCount;
            var h = (float)size.Height;

            for (int i = 0; i < binCount; i++)
            {
                var x = i * w;
                var y = (1 - (float)Math.Pow(histogram[i], graphPower)) * h;

                brush.StartPoint = new Vector2(x, y);
                brush.EndPoint   = new Vector2(x, h);

                drawingSession.FillRectangle(x, y, w, h - y, brush);
            }
        }
Esempio n. 4
0
        static void TestHistogram(CanvasBitmap bitmap, Rect sourceRectangle, EffectChannelSelect channelSelect, params float[] expected)
        {
            var histogram = CanvasImage.ComputeHistogram(bitmap, sourceRectangle, bitmap.Device, channelSelect, 2);

            CollectionAssert.AreEqual(expected, histogram);
        }
Esempio n. 5
0
        void DrawHistogram(CanvasDrawingSession drawingSession, Size size, EffectChannelSelect channelSelect, CanvasLinearGradientBrush brush)
        {
            const int binCount = 64;
            const float graphPower = 0.25f; // Nonlinear scale makes the graph show small changes more clearly.

            float[] histogram = CanvasImage.ComputeHistogram(hueEffect, bitmap.Bounds, drawingSession, channelSelect, binCount);

            var w = (float)size.Width / binCount;
            var h = (float)size.Height;

            for (int i = 0; i < binCount; i++)
            {
                var x = i * w;
                var y = (1 - (float)Math.Pow(histogram[i], graphPower)) * h;

                brush.StartPoint = new Vector2(x, y);
                brush.EndPoint = new Vector2(x, h);

                drawingSession.FillRectangle(x, y, w, h - y, brush);
            }
        }