Ejemplo n.º 1
0
        private void saveButton_Click(object sender, EventArgs e)
        {
            if (renderTarget == null)
            {
                // Should not happen
                MessageBox.Show("Unable to save file.");
                return;
            }

            SaveFileDialog saveDlg = new SaveFileDialog();

            saveDlg.Filter = "Bitmap image (*.bmp)|*.bmp|Png image (*.png)|*.png|Jpeg image (*.jpg)|*.jpg|Gif image (*.gif)|*.gif";
            if (DialogResult.OK == saveDlg.ShowDialog())
            {
                SizeU size = new SizeU((uint)ClientSize.Width, (uint)ClientSize.Height);

                ImagingBitmap wicBitmap = wicFactory.CreateImagingBitmap(
                    size.Width,
                    size.Height,
                    PixelFormats.Bgr32Bpp,
                    BitmapCreateCacheOption.CacheOnLoad);

                D2DBitmap d2dBitmap = renderTarget.CreateBitmap(size, new BitmapProperties(new PixelFormat(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format.B8G8R8A8UNorm, AlphaMode.Ignore), renderTarget.Dpi.X, renderTarget.Dpi.Y));
                d2dBitmap.CopyFromRenderTarget(renderTarget);

                RenderTarget wicRenderTarget =
                    d2dFactory.CreateWicBitmapRenderTarget(wicBitmap, renderProps);

                wicRenderTarget.BeginDraw();

                wicRenderTarget.DrawBitmap(d2dBitmap);
                wicRenderTarget.EndDraw();

                Guid fileType;
                switch (saveDlg.FilterIndex)
                {
                case 1: fileType = ContainerFormats.Bmp;
                    break;

                case 2: fileType = ContainerFormats.Png;
                    break;

                case 3: fileType = ContainerFormats.Jpeg;
                    break;

                case 4: fileType = ContainerFormats.Gif;
                    break;

                default: fileType = ContainerFormats.Bmp;     // default to bitmap files
                    break;
                }

                wicBitmap.SaveToFile(wicFactory, fileType, saveDlg.FileName);
            }
        }