コード例 #1
0
 protected static void Export(IPresentationImage image, string filePath, ExportImageParams exportParams, ImageCodecInfo encoder, EncoderParameters encoderParameters)
 {
     using (Bitmap bmp = DrawToBitmap(image, exportParams))
     {
         Export(bmp, filePath, encoder, encoderParameters);
     }
 }
コード例 #2
0
 protected static void Export(IPresentationImage image, string filePath, ExportImageParams exportParams, ImageFormat imageFormat)
 {
     using (Bitmap bmp = DrawToBitmap(image, exportParams))
     {
         Export(bmp, filePath, imageFormat);
     }
 }
コード例 #3
0
ファイル: ImageExporter.cs プロジェクト: shihao80/ClearCanvas
        protected static void Export(IPresentationImage image, string filePath, ExportImageParams exportParams, ImageCodecInfo encoder, EncoderParameters encoderParameters)
        {
            using (Bitmap bmp = DrawToBitmap(image, exportParams))
            {
                // try to save the dpi in the meta header for image types that support it (the GDI+ implementation of TIFF encoder doesn't even though TIFF itself supports it)
                bmp.SetResolution(exportParams.Dpi, exportParams.Dpi);

                Export(bmp, filePath, encoder, encoderParameters);
            }
        }
コード例 #4
0
            private void ExportSingleImage(IPresentationImage image, ExportImageParams exportParams)
            {
                image = GetImageForExport(image);

                string fileName = _fileNamingStrategy.GetSingleImageFileName(image, FileExtension);

                SelectedImageExporter.Export(image, fileName, exportParams);

                ReportProgress(fileName, ++_progress);
            }
コード例 #5
0
        private void ExportImages(IBackgroundTaskContext context, ref List <IPresentationImage> imagesToDispose)
        {
            ExportImageParams exportParams = new ExportImageParams();

            exportParams.Scale            = Scale;
            exportParams.ExportOption     = _exportOption;
            exportParams.DisplayRectangle = _clipboardItem.DisplayRectangle;
            exportParams.SizeMode         = SizeMode;
            exportParams.OutputSize       = new Size(Width, Height);
            exportParams.BackgroundColor  = BackgroundColor;

            using (Avi.VideoStreamWriter writer = new Avi.VideoStreamWriter(_selectedCodec))
            {
                if (!UseDefaultQuality)
                {
                    writer.Quality = _quality;
                }

                for (int i = 0; i < NumberOfImages; ++i)
                {
                    if (context != null && context.CancelRequested)
                    {
                        break;
                    }

                    if (context != null)
                    {
                        int    number  = i + 1;
                        string message = String.Format(SR.MessageFormatExportingFrame, number, NumberOfImages);
                        ReportProgress(context, message, number);
                    }

                    IPresentationImage image = ImageExporter.ClonePresentationImage(DisplaySet.PresentationImages[i]);
                    imagesToDispose.Add(image);

                    using (Bitmap bitmap = ImageExporter.DrawToBitmap(image, exportParams))
                    {
                        if (!writer.IsOpen)
                        {
                            //many codecs (like DivX) expect width and/or height to be divisible by 4.
                            int width  = NormalizeDimension(bitmap.Width);
                            int height = NormalizeDimension(bitmap.Height);

                            writer.Width     = width;
                            writer.Height    = height;
                            writer.FrameRate = this.FrameRate;

                            writer.Open(this.FilePath);
                        }

                        writer.AddBitmap(bitmap);
                    }
                }
            }
        }
コード例 #6
0
        private ExportImageParams GetExportParams(ClipboardItem clipboardItem)
        {
            ExportImageParams exportParams = new ExportImageParams();

            exportParams.ExportOption     = ExportOption;
            exportParams.DisplayRectangle = clipboardItem.DisplayRectangle;
            exportParams.Scale            = Scale;
            exportParams.SizeMode         = SizeMode;
            exportParams.OutputSize       = new Size(Width, Height);
            exportParams.BackgroundColor  = BackgroundColor;
            return(exportParams);
        }
コード例 #7
0
            private void ExportDisplaySet(IDisplaySet displaySet, ExportImageParams exportParams)
            {
                foreach (ImageFileNamePair pair in _fileNamingStrategy.GetImagesAndFileNames(displaySet, FileExtension))
                {
                    if (IsAsynchronous && _taskContext.CancelRequested)
                    {
                        break;
                    }

                    IPresentationImage image = GetImageForExport(pair.Image);
                    SelectedImageExporter.Export(image, pair.FileName, exportParams);

                    ReportProgress(pair.FileName, ++_progress);
                }
            }
コード例 #8
0
        private void Export()
        {
            if (SelectedImageExporter == null)
            {
                throw new InvalidOperationException("No exporter was chosen; unable to export any images.");
            }

            if (NumberOfImagesToExport == 1)
            {
                EventResult      result            = EventResult.Success;
                AuditedInstances exportedInstances = GetInstancesForAudit(ItemsToExport, this.ExportFilePath);

                try
                {
                    if (!Directory.Exists(Path.GetDirectoryName(ExportFilePath ?? "")))
                    {
                        throw new FileNotFoundException("The specified export file path does not exist: " + ExportFilePath ?? "");
                    }

                    ClipboardItem clipboardItem = (ClipboardItem)_itemsToExport[0];

                    ExportImageParams exportParams = GetExportParams(clipboardItem);
                    SelectedImageExporter.Export((IPresentationImage)clipboardItem.Item, ExportFilePath, exportParams);
                }
                catch (Exception ex)
                {
                    result = EventResult.SeriousFailure;
                    Platform.Log(LogLevel.Error, ex);
                }
                finally
                {
                    AuditHelper.LogExportStudies(exportedInstances, EventSource.CurrentUser, result);
                }
            }
            else
            {
                if (!Directory.Exists(ExportFilePath ?? ""))
                {
                    throw new FileNotFoundException("The specified export directory does not exist." + ExportFilePath ?? "");
                }

                _multipleImageExporter = new MultipleImageExporter(this);
                _multipleImageExporter.Run();
            }
        }
コード例 #9
0
            private void Export()
            {
                ReportProgress(SR.MessageExportingImages, _progress);

                foreach (ClipboardItem clipboardItem in ItemsToExport)
                {
                    if (IsAsynchronous && _taskContext.CancelRequested)
                    {
                        break;
                    }

                    ExportImageParams exportParams = GetExportParams(clipboardItem);

                    if (clipboardItem.Item is IPresentationImage)
                    {
                        ExportSingleImage((IPresentationImage)clipboardItem.Item, exportParams);
                    }
                    else if (clipboardItem.Item is IDisplaySet)
                    {
                        ExportDisplaySet((IDisplaySet)clipboardItem.Item, exportParams);
                    }
                }

                if (IsAsynchronous)
                {
                    if (_taskContext.CancelRequested)
                    {
                        ReportProgress(SR.MessageCancelled, _progress);
                        _taskContext.Cancel();
                    }
                    else
                    {
                        ReportProgress(SR.MessageExportComplete, _progress);
                        _taskContext.Complete();
                    }
                }
            }
コード例 #10
0
		public static Bitmap DrawToBitmap(IPresentationImage image, ExportImageParams exportParams)
		{
			Platform.CheckForNullReference(image, "image");
			Platform.CheckForNullReference(exportParams, "exportParams");

			if (!(image is ISpatialTransformProvider))
				throw new ArgumentException("The image must have a valid ImageSpatialTransform in order to be exported.");

			if (exportParams.ExportOption == ExportOption.TrueSize)
			{
				var imageSopProvider = image as IImageSopProvider;
				var pixelSpacing = imageSopProvider == null ? null : imageSopProvider.Frame.NormalizedPixelSpacing;
				if (pixelSpacing == null || pixelSpacing.IsNull)
					throw new ArgumentException("The image does not contain pixel spacing information.  TrueSize export is not possible.");
			}

			IImageSpatialTransform transform = ((ISpatialTransformProvider) image).SpatialTransform as IImageSpatialTransform;
			if (transform == null)
				throw new ArgumentException("The image must have a valid ImageSpatialTransform in order to be exported.");

			if (exportParams.ExportOption == ExportOption.TrueSize)
				return DrawTrueSizeImageToBitmap(image, exportParams.OutputSize, exportParams.Dpi);

			if (exportParams.SizeMode == SizeMode.Scale)
			{
				// TODO: Refactor ImageExporter, so there only the displayRectangle and OutputRectangle are provided
				//		Scale can be automatically figured out.
				//		A "Padded" option can be provided to distinguish between the current Fixed and ScaleToFit options
				// TODO: Refactor ImageExporter, so there are separate exporters for each ExportOption.
				//		The ExportImageParams is getting too many options and not all of them are applicable to each exporter
				//		Instead, each exporter should have its own parameters.

				if (exportParams.ExportOption == ExportOption.Wysiwyg)
				{
					return DrawWysiwygImageToBitmap(image, exportParams.DisplayRectangle, exportParams.Scale, exportParams.Dpi);
				}
				else
				{
					return DrawCompleteImageToBitmap(image, exportParams.Scale, exportParams.Dpi);
				}
			}
			else if (exportParams.SizeMode == SizeMode.ScaleToFit)
			{
				if (exportParams.ExportOption == ExportOption.Wysiwyg)
				{
					var scale = ScaleToFit(exportParams.DisplayRectangle.Size, exportParams.OutputSize);
					return DrawWysiwygImageToBitmap(image, exportParams.DisplayRectangle, scale, exportParams.Dpi);
				}
				else
				{
					var scale = ScaleToFit(image.SceneSize, exportParams.OutputSize);
					return DrawCompleteImageToBitmap(image, scale, exportParams.Dpi);
				}
			}
			else
			{
				Bitmap paddedImage = new Bitmap(exportParams.OutputSize.Width, exportParams.OutputSize.Height);
				using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(paddedImage))
				{
					// paint background
					using (Brush b = new SolidBrush(exportParams.BackgroundColor))
					{
						graphics.FillRectangle(b, new Rectangle(Point.Empty, exportParams.OutputSize));
					}

					// paint image portion
					Bitmap bmp;
					if (exportParams.ExportOption == ExportOption.Wysiwyg)
					{
						float scale = ScaleToFit(exportParams.DisplayRectangle.Size, exportParams.OutputSize);
						bmp = DrawWysiwygImageToBitmap(image, exportParams.DisplayRectangle, scale, exportParams.Dpi);
					}
					else
					{
						float scale = ScaleToFit(image.SceneSize, exportParams.OutputSize);
						bmp = DrawCompleteImageToBitmap(image, scale, exportParams.Dpi);
					}
						graphics.DrawImageUnscaledAndClipped(bmp, new Rectangle(CenterRectangles(bmp.Size, exportParams.OutputSize), bmp.Size));
					bmp.Dispose();
				}
				
				return paddedImage;
			}
		}
コード例 #11
0
		public abstract void Export(IPresentationImage image, string filePath, ExportImageParams exportParams);
コード例 #12
0
		protected static void Export(IPresentationImage image, string filePath, ExportImageParams exportParams, ImageCodecInfo encoder, EncoderParameters encoderParameters)
		{
			using (Bitmap bmp = DrawToBitmap(image, exportParams))
			{
				// try to save the dpi in the meta header for image types that support it (the GDI+ implementation of TIFF encoder doesn't even though TIFF itself supports it)
				bmp.SetResolution(exportParams.Dpi, exportParams.Dpi);

				Export(bmp, filePath, encoder, encoderParameters);
			}
		}
コード例 #13
0
ファイル: MultipleImageExporter.cs プロジェクト: nhannd/Xian
			private void ExportDisplaySet(IDisplaySet displaySet, ExportImageParams exportParams)
			{
				foreach (ImageFileNamePair pair in _fileNamingStrategy.GetImagesAndFileNames(displaySet, FileExtension))
				{
					if (IsAsynchronous && _taskContext.CancelRequested)
						break;

					IPresentationImage image = GetImageForExport(pair.Image);
					SelectedImageExporter.Export(image, pair.FileName, exportParams);

					ReportProgress(pair.FileName, ++_progress);
				}
			}
コード例 #14
0
ファイル: MultipleImageExporter.cs プロジェクト: nhannd/Xian
			private void ExportSingleImage(IPresentationImage image, ExportImageParams exportParams)
			{
				image = GetImageForExport(image);

				string fileName = _fileNamingStrategy.GetSingleImageFileName(image, FileExtension);
				SelectedImageExporter.Export(image, fileName, exportParams);

				ReportProgress(fileName, ++_progress);
			}
コード例 #15
0
		protected static void Export(IPresentationImage image, string filePath, ExportImageParams exportParams, ImageCodecInfo encoder, EncoderParameters encoderParameters)
		{
			using (Bitmap bmp = DrawToBitmap(image, exportParams))
			{
				Export(bmp, filePath, encoder, encoderParameters);
			}
		}
コード例 #16
0
		protected static void Export(IPresentationImage image, string filePath, ExportImageParams exportParams, ImageFormat imageFormat)
		{
			using (Bitmap bmp = DrawToBitmap(image, exportParams))
			{
				Export(bmp, filePath, imageFormat);
			}
		}
コード例 #17
0
ファイル: StandardImageExporters.cs プロジェクト: nhannd/Xian
		public override void Export(IPresentationImage image, string filePath, ExportImageParams exportParams)
		{
			Export(image, filePath, exportParams, _imageFormat);
		}
コード例 #18
0
        public static Bitmap DrawToBitmap(IPresentationImage image, ExportImageParams exportParams)
        {
            Platform.CheckForNullReference(image, "image");
            Platform.CheckForNullReference(exportParams, "exportParams");

            if (!(image is ISpatialTransformProvider) || !(image is IImageGraphicProvider))
            {
                throw new ArgumentException("The image must implement IImageGraphicProvider and have a valid ImageSpatialTransform in order to be exported.");
            }

            if (exportParams.ExportOption == ExportOption.TrueSize)
            {
                var imageSopProvider = image as IImageSopProvider;
                var pixelSpacing     = imageSopProvider == null ? null : imageSopProvider.Frame.NormalizedPixelSpacing;
                if (pixelSpacing == null || pixelSpacing.IsNull)
                {
                    throw new ArgumentException("The image does not contain pixel spacing information.  TrueSize export is not possible.");
                }
            }

            ImageSpatialTransform transform = ((ISpatialTransformProvider)image).SpatialTransform as ImageSpatialTransform;

            if (transform == null)
            {
                throw new ArgumentException("The image must have a valid ImageSpatialTransform in order to be exported.");
            }

            if (exportParams.ExportOption == ExportOption.TrueSize)
            {
                return(DrawTrueSizeImageToBitmap(image, exportParams.OutputSize, exportParams.Dpi));
            }

            if (exportParams.SizeMode == SizeMode.Scale)
            {
                // TODO: Refactor ImageExporter, so there only the displayRectangle and OutputRectangle are provided
                //		Scale can be automatically figured out.
                //		A "Padded" option can be provided to distinguish between the current Fixed and ScaleToFit options
                // TODO: Refactor ImageExporter, so there are separate exporters for each ExportOption.
                //		The ExportImageParams is getting too many options and not all of them are applicable to each exporter
                //		Instead, each exporter should have its own parameters.

                if (exportParams.ExportOption == ExportOption.Wysiwyg)
                {
                    return(DrawWysiwygImageToBitmap(image, exportParams.DisplayRectangle, exportParams.Scale, exportParams.Dpi));
                }
                else
                {
                    return(DrawCompleteImageToBitmap(image, exportParams.Scale, exportParams.Dpi));
                }
            }
            else if (exportParams.SizeMode == SizeMode.ScaleToFit)
            {
                if (exportParams.ExportOption == ExportOption.Wysiwyg)
                {
                    var scale = ScaleToFit(exportParams.DisplayRectangle.Size, exportParams.OutputSize);
                    return(DrawWysiwygImageToBitmap(image, exportParams.DisplayRectangle, scale, exportParams.Dpi));
                }
                else
                {
                    var sourceImage = (IImageGraphicProvider)image;
                    var scale       = ScaleToFit(new Size(sourceImage.ImageGraphic.Columns, sourceImage.ImageGraphic.Rows), exportParams.OutputSize);
                    return(DrawCompleteImageToBitmap(image, scale, exportParams.Dpi));
                }
            }
            else
            {
                Bitmap paddedImage = new Bitmap(exportParams.OutputSize.Width, exportParams.OutputSize.Height);
                using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(paddedImage))
                {
                    // paint background
                    using (Brush b = new SolidBrush(exportParams.BackgroundColor))
                    {
                        graphics.FillRectangle(b, new Rectangle(Point.Empty, exportParams.OutputSize));
                    }

                    // paint image portion
                    Bitmap bmp;
                    if (exportParams.ExportOption == ExportOption.Wysiwyg)
                    {
                        float scale = ScaleToFit(exportParams.DisplayRectangle.Size, exportParams.OutputSize);
                        bmp = DrawWysiwygImageToBitmap(image, exportParams.DisplayRectangle, scale, exportParams.Dpi);
                    }
                    else
                    {
                        IImageGraphicProvider sourceImage = (IImageGraphicProvider)image;
                        float scale = ScaleToFit(new Size(sourceImage.ImageGraphic.Columns, sourceImage.ImageGraphic.Rows), exportParams.OutputSize);
                        bmp = DrawCompleteImageToBitmap(image, scale, exportParams.Dpi);
                    }
                    graphics.DrawImageUnscaledAndClipped(bmp, new Rectangle(CenterRectangles(bmp.Size, exportParams.OutputSize), bmp.Size));
                    bmp.Dispose();
                }

                return(paddedImage);
            }
        }
コード例 #19
0
 public abstract void Export(IPresentationImage image, string filePath, ExportImageParams exportParams);
コード例 #20
0
 public override void Export(IPresentationImage image, string filePath, ExportImageParams exportParams)
 {
     Export(image, filePath, exportParams, _imageFormat);
 }