Browse Source

* Bitmap.jvm.cs: fixed InternalSave() error handling
* Image.jvm.cs: fixed Save() error handling
* ImageCodec.jvm.cs: Fixed error handling in codecs emumeration flow

svn path=/trunk/mcs/; revision=53006

Vladimir Krasnov 20 years ago
parent
commit
d33f9e0cf7

+ 4 - 0
mcs/class/System.Drawing/System.Drawing.Imaging/ChangeLog

@@ -1,3 +1,7 @@
+2005-11-14 Vladimir Krasnov <[email protected]>
+
+	* ImageCodec.jvm.cs: Fixed error handling in codecs emumeration flow
+
 2005-11-13  Kornél Pál  <[email protected]>
 
 	* ImageFormat.cs: Fixed ToString to use this.Equals to reflect argument

+ 23 - 6
mcs/class/System.Drawing/System.Drawing.Imaging/ImageCodec.jvm.cs

@@ -93,7 +93,7 @@ namespace Mainsoft.Drawing.Imaging {
 		public static ImageCodec CreateReader(Guid clsid) {
 			ImageCodec codec = null;
 			try {
-				ImageCodecInfo codecInfo = (ImageCodecInfo) Decoders[clsid];
+				ImageCodecInfo codecInfo = FindDecoder(clsid);
 				java.util.Iterator iter = imageio.ImageIO.getImageReadersByMIMEType( codecInfo.MimeType );
 				codec = CreateReader(iter);
 			}
@@ -124,7 +124,7 @@ namespace Mainsoft.Drawing.Imaging {
 		public static ImageCodec CreateWriter(Guid clsid) {
 			ImageCodec codec = null;
 			try {
-				ImageCodecInfo codecInfo = (ImageCodecInfo) Encoders[clsid];
+				ImageCodecInfo codecInfo = FindEncoder(clsid);
 				java.util.Iterator iter = imageio.ImageIO.getImageWritersByMIMEType( codecInfo.MimeType );
 				codec = CreateWriter(iter);
 			}
@@ -177,11 +177,22 @@ namespace Mainsoft.Drawing.Imaging {
 		}
 
 		internal static ImageCodecInfo FindEncoder (Guid clsid) {
-			return (ImageCodecInfo) Encoders[clsid];
+			ImageCodecInfo codec = (ImageCodecInfo) Encoders[clsid];
+			if (codec == null) {
+				// .net saves in png if cannot find requested encoder. atc id 316563
+				codec = (ImageCodecInfo) Encoders[ ImageCodec.PngClsid ];
+			}
+			return codec;
 		}
 
 		internal static ImageCodecInfo FindDecoder (Guid clsid) {
-			return (ImageCodecInfo) Decoders[clsid];
+			ImageCodecInfo codec = (ImageCodecInfo) Decoders[clsid];
+			if (codec == null) {
+				ImageFormat format = ClsidToImageFormat(clsid);
+				string name = (format != null) ? format.ToString() : clsid.ToString();
+				throw new NotSupportedException(String.Format("The '{0}' format decoder is not installed.", name));
+			}
+			return codec;
 		}
 
 		#endregion
@@ -198,7 +209,13 @@ namespace Mainsoft.Drawing.Imaging {
 				ici.Clsid = clsid;
 				ici.FormatID = formatID;
 				ici.MimeType = mimeType;
-				java.util.Iterator iter = GetIterator (mimeType);
+				java.util.Iterator iter = null;
+				try {
+					iter = GetIterator (mimeType);
+				}
+				catch(Exception) {
+					return null;
+				}
 				while (iter.hasNext ()) {
 					spi.ImageReaderWriterSpi rw = GetNext (iter);
 					try {
@@ -242,7 +259,7 @@ namespace Mainsoft.Drawing.Imaging {
 					Guid clsid = new Guid (nvc.GetKey (i));
 					ImageFormat format = ClsidToImageFormat (clsid);
 					ImageCodecInfo codec = ProcessOneCodec (clsid, format.Guid, nvc[i]);
-					if (codec.FilenameExtension != null)
+					if ((codec != null) && (codec.FilenameExtension != null))
 						codecs [clsid] = codec;
 				}
 				return codecs;

+ 0 - 8
mcs/class/System.Drawing/System.Drawing/Bitmap.jvm.cs

@@ -150,14 +150,6 @@ namespace System.Drawing
 		protected override void InternalSave (stream.ImageOutputStream output, Guid clsid) {
 
 			ImageCodec ic = ImageCodec.CreateWriter( clsid );
-
-			// .net saves in png if cannot find requested encoder. act id 316563
-			if (ic == null)
-				ic = ImageCodec.CreateWriter( ImageFormat.Png );
-
-			if (ic == null)
-				throw new NotSupportedException("The requested format encoder is not supported");
-
 			using (ic) {
 
 				PlainImage plainImage = CurrentImage;

+ 5 - 0
mcs/class/System.Drawing/System.Drawing/ChangeLog

@@ -1,3 +1,8 @@
+2005-11-14 Vladimir Krasnov <[email protected]>
+
+	* Bitmap.jvm.cs: fixed InternalSave() error handling
+	* Image.jvm.cs: fixed Save() error handling
+
 2005-11-13 Konstantin Triger <[email protected]>
 
         * FontFamily.jvm.cs: Refactoring.

+ 0 - 3
mcs/class/System.Drawing/System.Drawing/Image.jvm.cs

@@ -320,9 +320,6 @@ namespace System.Drawing {
 
 		public void Save (Stream stream, ImageFormat format) {
 			ImageCodecInfo encoder = ImageCodec.FindEncoder ( ImageCodec.ImageFormatToClsid (format) );
-			if (encoder == null)
-				throw new NotSupportedException("The requested format encoder is not supported");
-
 			Save (stream, encoder, null);
 		}