示例#1
0
        private async Task LoadOutputVirtualBitmap()
        {
            if (OutputVirtualBitmap != null)
            {
                OutputVirtualBitmap.Dispose();
                OutputVirtualBitmap = null;
            }

            //LoadedImageInfo = "";

            OutputVirtualBitmap = await CanvasVirtualBitmap.LoadAsync(OutputImageCanvas.Device, OutputImageStream, CanvasVirtualBitmapOptions.None);

            if (OutputImageCanvas == null)
            {
                // This can happen if the page is unloaded while LoadAsync is running
                return;
            }

            ImageResolution.Text = InputVirtualBitmap.Bounds.Width + " x " + InputVirtualBitmap.Bounds.Height + " | " + OutputVirtualBitmap.Bounds.Width + " x " + OutputVirtualBitmap.Bounds.Height;

            var size = OutputVirtualBitmap.Size;

            OutputImageCanvas.Width  = size.Width * (Zoom + 1);
            OutputImageCanvas.Height = size.Height * (Zoom + 1);
            OutputImageCanvas.Invalidate();

            //LoadedImageInfo = string.Format("{0}x{1} image, is {2}CachedOnDemand", size.Width, size.Height, virtualBitmap.IsCachedOnDemand ? "" : "not ");
        }
示例#2
0
        private async Task LoadVirtualBitmap()
        {
            if (virtualBitmap != null)
            {
                virtualBitmap.Dispose();
                virtualBitmap = null;
            }

            LoadedImageInfo = "";

            NotifyBitmapChanged();

            virtualBitmap = await CanvasVirtualBitmap.LoadAsync(ImageVirtualControl.Device, imageStream, virtualBitmapOptions);

            if (ImageVirtualControl == null)
            {
                // This can happen if the page is unloaded while LoadAsync is running
                return;
            }

            var size = virtualBitmap.Size;

            ImageVirtualControl.Width  = size.Width;
            ImageVirtualControl.Height = size.Height;
            ImageVirtualControl.Invalidate();

            LoadedImageInfo = string.Format("{0}x{1} image, is {2}CachedOnDemand",
                                            size.Width, size.Height, virtualBitmap.IsCachedOnDemand ? "" : "not ");

            NotifyBitmapChanged();
        }
示例#3
0
        private async void MainCenter(CanvasVirtualBitmap cb)//Main:Center为图片
        {
            //新建层
            CanvasRenderTarget crt = new CanvasRenderTarget(App.Model.VirtualControl, App.Model.Width, App.Model.Height);

            using (var ds = crt.CreateDrawingSession())
            {
                ds.DrawImage(cb);
            }
            Layer l = new Layer {
                CanvasRenderTarget = crt
            };

            if (App.Model.isLowView)
            {
                l.LowView();
            }
            else
            {
                l.SquareView();
            }
            l.SetWriteableBitmap(App.Model.VirtualControl);

            //格式化
            App.Formatting(l);
        }
示例#4
0
        private async Task LoadInputVirtualBitmap()
        {
            ContentFrame_Reset();
            ContentFrameCollapse();

            if (InputVirtualBitmap != null)
            {
                InputVirtualBitmap.Dispose();
                InputVirtualBitmap = null;
            }

            //LoadedImageInfo = "";

            InputVirtualBitmap = await CanvasVirtualBitmap.LoadAsync(InputImageCanvas.Device, InputImageStream, CanvasVirtualBitmapOptions.None);

            if (InputImageCanvas == null)
            {
                // This can happen if the page is unloaded while LoadAsync is running
                return;
            }

            var size = InputVirtualBitmap.Size;

            InputImageCanvas.Width  = size.Width * (Zoom + 1);
            InputImageCanvas.Height = size.Height * (Zoom + 1);
            InputImageCanvas.Invalidate();

            //LoadedImageInfo = string.Format("{0}x{1} image, is {2}CachedOnDemand", size.Width, size.Height, virtualBitmap.IsCachedOnDemand ? "" : "not ");
        }
示例#5
0
        //图片图层
        private async void LayerImageButton_Click(object sender, RoutedEventArgs e)
        {
            //文件选择器
            FileOpenPicker openPicker = new FileOpenPicker();

            //选择视图模式
            openPicker.ViewMode = PickerViewMode.Thumbnail;
            //初始位置
            openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
            //添加文件类型
            openPicker.FileTypeFilter.Add(".jpg");
            openPicker.FileTypeFilter.Add(".jpeg");
            openPicker.FileTypeFilter.Add(".png");
            openPicker.FileTypeFilter.Add(".bmp");

            StorageFile file = await openPicker.PickSingleFileAsync();//打开选择器

            if (file != null)
            {
                using (IRandomAccessStream stream = await file.OpenReadAsync())
                {
                    //图片
                    App.Model.SecondCanvasBitmap = await CanvasVirtualBitmap.LoadAsync(App.Model.VirtualControl, stream);

                    App.InitializeOther();
                    Layers();

                    App.Model.isReRender = true;                    //重新渲染
                    App.Model.Refresh++;                            //画布刷新
                    App.Model.LayersCount = App.Model.Layers.Count; //Undo:撤销
                }
            }
        }
示例#6
0
        private async void Pictures(StorageFile file)
        {
            using (IRandomAccessStream stream = await file.OpenReadAsync())
            {
                App.Model.Name = file.DisplayName;//Name:名称

                //图片
                App.Model.SecondCanvasBitmap = await CanvasVirtualBitmap.LoadAsync(App.Model.VirtualControl, stream);

                //宽高
                App.Model.Width  = (int)App.Model.SecondCanvasBitmap.SizeInPixels.Width;
                App.Model.Height = (int)App.Model.SecondCanvasBitmap.SizeInPixels.Height;
                if (App.Model.Width > 16384)
                {
                    App.Model.Width = 16384;
                }
                if (App.Model.Height > 16384)
                {
                    App.Model.Height = 16384;
                }

                MainCenter(App.Model.SecondCanvasBitmap);
                App.Model.StartVisibility = Visibility.Collapsed;
            }
        }
示例#7
0
        static async Task <CanvasVirtualBitmap> CreateTestVirtualBitmap(ICanvasResourceCreatorWithDpi resourceCreator)
        {
            var canvasBitmap = CreateTestBitmap(resourceCreator, 96);

            var stream = new InMemoryRandomAccessStream();
            await canvasBitmap.SaveAsync(stream, CanvasBitmapFileFormat.Png);

            return(await CanvasVirtualBitmap.LoadAsync(resourceCreator, stream));
        }
示例#8
0
        static async Task <CanvasVirtualBitmap> CreateTestVirtualBitmap(ICanvasResourceCreatorWithDpi resourceCreator)
        {
#if WINDOWS_UWP
            var canvasBitmap = CreateTestBitmap(resourceCreator, 96);

            var stream = new InMemoryRandomAccessStream();
            await canvasBitmap.SaveAsync(stream, CanvasBitmapFileFormat.Png);

            return(await CanvasVirtualBitmap.LoadAsync(resourceCreator, stream));
#else
            await Task.Yield(); // prevent warning about no await in async method

            return(new CanvasVirtualBitmap());
#endif
        }
        async Task LoadBitmaps(CanvasControl sender)
        {
            var bitmapType   = CurrentBitmapType;
            var bitmapSource = CurrentBitmapSource;

            var newTestBitmaps = new ICanvasImage[fileNames.Length];

            for (int i = 0; i < fileNames.Length; i++)
            {
                Package       package           = Package.Current;
                StorageFolder installedLocation = package.InstalledLocation;
                string        pathName          = installedLocation.Path + "\\" + "BitmapOrientation" + "\\" + fileNames[i];

                if (bitmapSource == BitmapSourceOption.FromStream)
                {
                    StorageFile storageFile = await StorageFile.GetFileFromPathAsync(pathName);

                    using (IRandomAccessStreamWithContentType stream = await storageFile.OpenReadAsync())
                    {
                        if (bitmapType == BitmapType.CanvasBitmap)
                        {
                            newTestBitmaps[i] = await CanvasBitmap.LoadAsync(sender, stream);
                        }
#if WINDOWS_UWP
                        else
                        {
                            newTestBitmaps[i] = await CanvasVirtualBitmap.LoadAsync(sender, stream);
                        }
#endif
                    }
                }
                else
                {
                    if (bitmapType == BitmapType.CanvasBitmap)
                    {
                        newTestBitmaps[i] = await CanvasBitmap.LoadAsync(sender, pathName);
                    }
#if WINDOWS_UWP
                    else
                    {
                        newTestBitmaps[i] = await CanvasVirtualBitmap.LoadAsync(sender, pathName);
                    }
#endif
                }
            }

            testBitmaps = newTestBitmaps;
        }
示例#10
0
            PerDeviceResources(ICanvasResourceCreatorWithDpi resourceCreator, CanvasVirtualBitmap virtualBitmap)
            {
                ResourceCreator = resourceCreator;

                DefaultDpiBitmap = CreateTestBitmap(resourceCreator, defaultDpi);
                HighDpiBitmap    = CreateTestBitmap(resourceCreator, highDpi);
                LowDpiBitmap     = CreateTestBitmap(resourceCreator, lowDpi);
                VirtualBitmap    = virtualBitmap;

                AutoDpiRenderTarget = new CanvasRenderTarget(resourceCreator, testSize, testSize);
                HighDpiRenderTarget = new CanvasRenderTarget(resourceCreator, testSize, testSize, highDpi);
                LowDpiRenderTarget  = new CanvasRenderTarget(resourceCreator, testSize, testSize, lowDpi);

                SaturationEffect = new SaturationEffect {
                    Saturation = 0
                };
            }
示例#11
0
        private async Task LoadVirtualBitmap()
        {
            try
            {
                ShowBusyIndicator("loading image...");

                if (virtualBitmap != null)
                {
                    virtualBitmap.Dispose();
                    virtualBitmap = null;
                }

                if (!string.IsNullOrEmpty(imageFilePath))
                {
                    var storageFile = await StorageFile.GetFileFromPathAsync(imageFilePath);

                    using (var stream = await storageFile.OpenReadAsync())
                    {
                        virtualBitmap = await CanvasVirtualBitmap.LoadAsync(MyCanvas.Device, stream);
                    }
                }

                // This can happen if the page is unloaded while this method is running
                if (MyCanvas == null || virtualBitmap == null)
                {
                    return;
                }

                MyCanvas.Width  = virtualBitmap.Size.Width;
                MyCanvas.Height = virtualBitmap.Size.Height;
                MyCanvas.Invalidate();
            }
            catch (Exception ex)
            {
                await new MessageDialog($"Something went wrong loading the image: {ex}", "Exception").ShowAsync();
            }
            finally
            {
                HideBusyIndicator();
            }
        }
示例#12
0
        private async void MenuOpen_Click(object sender, RoutedEventArgs e)
        {
            var picker = new FileOpenPicker();

            picker.FileTypeFilter.Add(".png");
            StorageFile file = await picker.PickSingleFileAsync();

            if (file != null)
            {
                using (var stream = await file.OpenReadAsync()) {
                    _bitmap = await CanvasVirtualBitmap.LoadAsync(
                        ImageCanvas,
                        stream,
                        CanvasVirtualBitmapOptions.CacheOnDemand);
                }
                _scaleEffect.Source = _bitmap;
                _scaleEffect.Scale  = new Vector2(1, 1);
                ImageCanvas.Width   = _bitmap.Size.Width;
                ImageCanvas.Height  = _bitmap.Size.Height;
                ImageCanvas.Invalidate();
            }
        }
示例#13
0
        private async void GGGGG_Drop(object sender, DragEventArgs e)
        {
            if (e.DataView.Contains(StandardDataFormats.StorageItems) == true)
            {
                var def   = e.GetDeferral();
                var items = await e.DataView.GetStorageItemsAsync();

                foreach (var item in items)
                {
                    var file = item as StorageFile;
                    if (file.FileType == ".jpg" | file.FileType == ".png")
                    {
                        using (IRandomAccessStream stream = await file.OpenReadAsync())
                        {
                            App.Model.SecondCanvasBitmap = await CanvasVirtualBitmap.LoadAsync(App.Model.VirtualControl, stream);

                            App.InitializeOther();
                            LayerControl_Layers();
                        }
                    }
                }
            }
        }
示例#14
0
            PerDeviceResources(ICanvasResourceCreatorWithDpi resourceCreator, CanvasVirtualBitmap virtualBitmap)
            {
                ResourceCreator = resourceCreator;

                DefaultDpiBitmap = CreateTestBitmap(resourceCreator, defaultDpi);
                HighDpiBitmap = CreateTestBitmap(resourceCreator, highDpi);
                LowDpiBitmap = CreateTestBitmap(resourceCreator, lowDpi);
                VirtualBitmap = virtualBitmap;

                AutoDpiRenderTarget = new CanvasRenderTarget(resourceCreator, testSize, testSize);
                HighDpiRenderTarget = new CanvasRenderTarget(resourceCreator, testSize, testSize, highDpi);
                LowDpiRenderTarget = new CanvasRenderTarget(resourceCreator, testSize, testSize, lowDpi);

                SaturationEffect = new SaturationEffect { Saturation = 0 };
            }
        private async Task LoadVirtualBitmap()
        {
            if (virtualBitmap != null)
            {
                virtualBitmap.Dispose();
                virtualBitmap = null;
            }

            LoadedImageInfo = "";

            NotifyBitmapChanged();

            virtualBitmap = await CanvasVirtualBitmap.LoadAsync(ImageVirtualControl.Device, imageStream, virtualBitmapOptions);

            if (ImageVirtualControl == null)
            {
                // This can happen if the page is unloaded while LoadAsync is running
                return;
            }

            var size = virtualBitmap.Size;
            ImageVirtualControl.Width = size.Width;
            ImageVirtualControl.Height = size.Height;
            ImageVirtualControl.Invalidate();

            LoadedImageInfo = string.Format("{0}x{1} image, is {2}CachedOnDemand",
                size.Width, size.Height, virtualBitmap.IsCachedOnDemand ? "" : "not ");

            NotifyBitmapChanged();
        }
示例#16
0
        //康戳键
        private void KeyCtrl(VirtualKey value)
        {
            switch (value)
            {
            //Undo:撤销
            case VirtualKey.Z: if (App.Model.isUndo)
                {
                    Undo();
                }
                break;

            case VirtualKey.Y: if (App.Model.isRedo)
                {
                    Redo();
                }
                break;

            case VirtualKey.S:  HomeContentDialog.ShowAsync();  break;

            //Mask:选区
            case VirtualKey.X: 修图.Control.MaskButton.Cut(); break;

            case VirtualKey.C: 修图.Control.MaskButton.Copy(); break;

            case VirtualKey.V:
                DataPackageView dataPackageView = Clipboard.GetContent();
                if (dataPackageView.Contains(StandardDataFormats.Bitmap))
                {
                    IRandomAccessStreamReference imageReceived = null;
                    imageReceived = dataPackageView.GetBitmapAsync().AsTask().Result;
                    if (imageReceived != null)
                    {
                        using (IRandomAccessStream stream = imageReceived.OpenReadAsync().AsTask().Result)
                        {
                            App.Model.SecondCanvasBitmap = CanvasVirtualBitmap.LoadAsync(App.Model.VirtualControl, stream).AsTask().Result;
                            App.InitializeOther();
                            LayerControl_Layers();
                        }
                    }
                }
                else if (App.Model.isClipboard == true)
                {
                    App.InitializeEffect();
                    MaskButton_Mask(102);
                }

                break;

            case VirtualKey.Delete: 修图.Control.MaskButton.Clear(); break;

            case VirtualKey.E: 修图.Control.MaskButton.Extract(); break;

            case VirtualKey.M: 修图.Control.MaskButton.Merge(); break;

            case VirtualKey.A: 修图.Control.MaskButton.All(); break;

            case VirtualKey.D: 修图.Control.MaskButton.Deselect(); break;

            case VirtualKey.P: 修图.Control.MaskButton.Pixel(); break;

            case VirtualKey.I: 修图.Control.MaskButton.Invert(); break;

            case VirtualKey.F: MaskButton_Mask(110); break;

            case VirtualKey.T: MaskButton_Mask(111); break;
            }
        }