diff options
Diffstat (limited to 'mcs/class/System.Drawing/System.Drawing.Imaging/ImageCodec.jvm.cs')
-rw-r--r-- | mcs/class/System.Drawing/System.Drawing.Imaging/ImageCodec.jvm.cs | 700 |
1 files changed, 0 insertions, 700 deletions
diff --git a/mcs/class/System.Drawing/System.Drawing.Imaging/ImageCodec.jvm.cs b/mcs/class/System.Drawing/System.Drawing.Imaging/ImageCodec.jvm.cs deleted file mode 100644 index 2eff947138a..00000000000 --- a/mcs/class/System.Drawing/System.Drawing.Imaging/ImageCodec.jvm.cs +++ /dev/null @@ -1,700 +0,0 @@ -using System;
-using System.Configuration;
-using System.Collections;
-using System.Collections.Specialized;
-using System.Drawing.Imaging;
-using System.Xml;
-using Mainsoft.Drawing.Configuration;
-
-using imageio = javax.imageio;
-using stream = javax.imageio.stream;
-using awt = java.awt;
-using image = java.awt.image;
-using spi = javax.imageio.spi;
-using dom = org.w3c.dom;
-
-namespace Mainsoft.Drawing.Imaging {
- /// <summary>
- /// Summary description for ImageCodec.
- /// </summary>
- public class ImageCodec : IDisposable {
-
- #region Members
-
- imageio.ImageReader _nativeReader = null;
- imageio.ImageWriter _nativeWriter = null;
- stream.ImageInputStream _nativeStream = null;
-
- ImageFormat _imageFormat = null;
-
- int _currentFrame = 0;
-
- #endregion
-
- #region Constructros
-
- protected ImageCodec() {
- }
-
- static ImageCodec() {
- }
-
- #endregion
-
- #region Internal properties
-
- internal imageio.ImageReader NativeReader {
- get { return _nativeReader; }
- set {
- _nativeReader = value;
- if (value == null)
- return;
- _imageFormat = MimeTypesToImageFormat( value.getOriginatingProvider().getMIMETypes() );
- }
- }
- internal imageio.ImageWriter NativeWriter {
- get { return _nativeWriter; }
- set {
- _nativeWriter = value;
- if (value == null)
- return;
- _imageFormat = MimeTypesToImageFormat( value.getOriginatingProvider().getMIMETypes() );
- }
- }
-
- internal stream.ImageInputStream NativeStream {
- get { return _nativeStream; }
- set {
- _nativeStream = value;
- if (value == null)
- return;
-
- if (NativeReader != null)
- NativeReader.setInput( value );
-
- if (NativeWriter != null)
- NativeWriter.setOutput( value );
- }
- }
-
- #endregion
-
- #region ImageCodec factory methods
-
- public static ImageCodec CreateReader(stream.ImageInputStream inputStream) {
- java.util.Iterator iter = imageio.ImageIO.getImageReaders( inputStream );
- return CreateReader(iter);
- }
-
- public static ImageCodec CreateReader(ImageFormat imageFormat) {
- return CreateReader( ImageFormatToClsid( imageFormat ) );
- }
-
- public static ImageCodec CreateReader(Guid clsid) {
- ImageCodec codec = null;
- try {
- ImageCodecInfo codecInfo = FindDecoder(clsid);
- java.util.Iterator iter = imageio.ImageIO.getImageReadersByMIMEType( codecInfo.MimeType );
- codec = CreateReader(iter);
- }
- catch {}
-
- 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;
- }
-
- private static ImageCodec CreateReader(java.util.Iterator iter) {
- if ( !iter.hasNext() ) - return null; -
- ImageCodec imageCodec = new ImageCodec();
- imageCodec.NativeReader = (imageio.ImageReader) iter.next();
- return imageCodec;
- }
-
- public static ImageCodec CreateWriter(ImageFormat imageFormat) {
- return CreateWriter( ImageFormatToClsid( imageFormat ) );
- }
-
- public static ImageCodec CreateWriter(Guid clsid) {
- ImageCodec codec = null;
- try {
- ImageCodecInfo codecInfo = FindEncoder(clsid);
- java.util.Iterator iter = imageio.ImageIO.getImageWritersByMIMEType( codecInfo.MimeType );
- codec = CreateWriter(iter);
- }
- catch {}
-
- if (codec == null) {
- ImageFormat format = ClsidToImageFormat(clsid);
- string name = (format != null) ? format.ToString() : clsid.ToString();
- throw new NotSupportedException(String.Format("The '{0}' format encoder is not installed.", name));
- }
-
- return codec;
- }
-
- private static ImageCodec CreateWriter(java.util.Iterator iter) {
- if ( !iter.hasNext() ) - return null; -
- ImageCodec imageCodec = new ImageCodec();
- imageCodec.NativeWriter = (imageio.ImageWriter) iter.next();
- return imageCodec;
- }
-
- #endregion
-
- #region Codec enumerations
-
- internal static Hashtable Decoders { - get { - const string MYNAME = "System.Drawing.Imaging.ImageCodecInfo.decoders"; - Hashtable o = (Hashtable) AppDomain.CurrentDomain.GetData (MYNAME); - if (o != null) - return o; - o = new ReaderSpiIterator().Iterate(); - AppDomain.CurrentDomain.SetData(MYNAME, o); - return o; - } - } - - internal static Hashtable Encoders { - get { - const string MYNAME = "System.Drawing.Imaging.ImageCodecInfo.encoders"; - Hashtable o = (Hashtable) AppDomain.CurrentDomain.GetData (MYNAME); - if (o != null) - return o; - o = new WriterSpiIterator().Iterate(); - AppDomain.CurrentDomain.SetData(MYNAME, o); - return o; - } - } - - internal static ImageCodecInfo FindEncoder (Guid 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) { - 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
-
- #region SpiIterators - - abstract class BaseSpiIterator { - protected abstract java.util.Iterator GetIterator (string mimeType); - protected abstract spi.ImageReaderWriterSpi GetNext (java.util.Iterator iter); - - #region ProcessOneCodec - private ImageCodecInfo ProcessOneCodec (Guid clsid, Guid formatID, string mimeType) { - ImageCodecInfo ici = new ImageCodecInfo (); - ici.Clsid = clsid; - ici.FormatID = formatID; - ici.MimeType = mimeType; - java.util.Iterator iter = null; - try { - iter = GetIterator (mimeType); - } - catch(Exception) { - return null; - } - while (iter.hasNext ()) { - spi.ImageReaderWriterSpi rw = GetNext (iter); - - ici.CodecName = rw.getDescription (java.util.Locale.getDefault ()); - //ici.DllName = null; - foreach (string suffix in rw.getFileSuffixes ()) { - if (ici.FilenameExtension != null) - ici.FilenameExtension += ";"; - ici.FilenameExtension += "*."+suffix; - } - ici.Flags = ImageCodecFlags.Builtin|ImageCodecFlags.SupportBitmap; - if (rw is spi.ImageReaderSpi) - ici.Flags |= ImageCodecFlags.Decoder; - - if (rw is spi.ImageWriterSpi) - ici.Flags |= ImageCodecFlags.Encoder; - - ici.FormatDescription = string.Join(";", - rw.getFormatNames()); - try { - ici.Version = (int)Convert.ToDouble(rw.getVersion ()); - } - catch (Exception) { - ici.Version = 1; - } - break; - } - return ici; - } - #endregion - - internal Hashtable Iterate () { - // TBD: Insert Exception handling here - NameValueCollection nvc = (NameValueCollection) System.Configuration.ConfigurationSettings - .GetConfig ("system.drawing/codecs"); - Hashtable codecs = new Hashtable (10); - - for (int i=0; i<nvc.Count; i++) { - Guid clsid = new Guid (nvc.GetKey (i)); - ImageFormat format = ClsidToImageFormat (clsid); - ImageCodecInfo codec = ProcessOneCodec (clsid, format.Guid, nvc[i]); - if ((codec != null) && (codec.FilenameExtension != null)) - codecs [clsid] = codec; - } - return codecs; - } - } - - class ReaderSpiIterator: BaseSpiIterator { - protected override java.util.Iterator GetIterator(string mimeType) {
- return imageio.ImageIO.getImageReadersByMIMEType (mimeType);
- }
- protected override javax.imageio.spi.ImageReaderWriterSpi GetNext(java.util.Iterator iter) {
- imageio.ImageReader r = (imageio.ImageReader) iter.next ();
- return r.getOriginatingProvider ();
- }
- } - - class WriterSpiIterator: BaseSpiIterator { - protected override java.util.Iterator GetIterator(string mimeType) {
- return imageio.ImageIO.getImageWritersByMIMEType (mimeType);
- }
- protected override javax.imageio.spi.ImageReaderWriterSpi GetNext(java.util.Iterator iter) {
- imageio.ImageWriter w = (imageio.ImageWriter) iter.next ();
- return w.getOriginatingProvider ();
- }
- } - #endregion -
- #region Clsid and FormatID - static Guid BmpClsid = new Guid ("557cf400-1a04-11d3-9a73-0000f81ef32e"); - static Guid JpegClsid = new Guid ("557cf401-1a04-11d3-9a73-0000f81ef32e"); - static Guid GifClsid = new Guid ("557cf402-1a04-11d3-9a73-0000f81ef32e"); - static Guid EmfClsid = new Guid ("557cf403-1a04-11d3-9a73-0000f81ef32e"); - static Guid WmfClsid = new Guid ("557cf404-1a04-11d3-9a73-0000f81ef32e"); - static Guid TiffClsid = new Guid ("557cf405-1a04-11d3-9a73-0000f81ef32e"); - static Guid PngClsid = new Guid ("557cf406-1a04-11d3-9a73-0000f81ef32e"); - static Guid IconClsid = new Guid ("557cf407-1a04-11d3-9a73-0000f81ef32e"); - - private static ImageFormat MimeTypesToImageFormat (string [] mimeTypes) { - foreach (ImageCodecInfo codec in Decoders.Values) - for (int i=0; i<mimeTypes.Length; i++) - if (codec.MimeType == mimeTypes [i]) - return new ImageFormat (codec.FormatID); - return null; - } - - internal static ImageFormat ClsidToImageFormat (Guid clsid) { - if (clsid.Equals (BmpClsid)) - return ImageFormat.Bmp; - else if (clsid.Equals (JpegClsid)) - return ImageFormat.Jpeg; - else if (clsid.Equals (GifClsid)) - return ImageFormat.Gif; - else if (clsid.Equals (EmfClsid)) - return ImageFormat.Emf; - else if (clsid.Equals (WmfClsid)) - return ImageFormat.Wmf; - else if (clsid.Equals (TiffClsid)) - return ImageFormat.Tiff; - else if (clsid.Equals (PngClsid)) - return ImageFormat.Png; - else if (clsid.Equals (IconClsid)) - return ImageFormat.Icon; - else - return null; - } - - internal static Guid ImageFormatToClsid (ImageFormat format) { - if (format == null) - return Guid.Empty; - - if (format.Guid.Equals (ImageFormat.Bmp.Guid)) - return BmpClsid; - else if (format.Guid.Equals (ImageFormat.Jpeg.Guid)) - return JpegClsid; - else if (format.Guid.Equals (ImageFormat.Gif)) - return GifClsid; - else if (format.Guid.Equals (ImageFormat.Emf.Guid)) - return EmfClsid; - else if (format.Guid.Equals (ImageFormat.Wmf.Guid)) - return WmfClsid; - else if (format.Guid.Equals (ImageFormat.Tiff.Guid)) - return TiffClsid; - else if (format.Guid.Equals (ImageFormat.Png.Guid)) - return PngClsid; - else if (format.Guid.Equals (ImageFormat.Icon.Guid)) - return IconClsid; - else - return Guid.Empty; - } - - private FrameDimension FormatFrameDimesion { - get { - if (ImageFormat == null) - return FrameDimension.Page; - - if (ImageFormat.Guid.Equals (ImageFormat.Bmp.Guid)) - return FrameDimension.Page; - else if (ImageFormat.Guid.Equals (ImageFormat.Jpeg.Guid)) - return FrameDimension.Page; - else if (ImageFormat.Guid.Equals (ImageFormat.Gif)) - return FrameDimension.Time; - else if (ImageFormat.Guid.Equals (ImageFormat.Emf.Guid)) - return FrameDimension.Page; - else if (ImageFormat.Guid.Equals (ImageFormat.Wmf.Guid)) - return FrameDimension.Page; - else if (ImageFormat.Guid.Equals (ImageFormat.Tiff.Guid)) - return FrameDimension.Page; - else if (ImageFormat.Guid.Equals (ImageFormat.Png.Guid)) - return FrameDimension.Page; - else if (ImageFormat.Guid.Equals (ImageFormat.Icon.Guid)) - return FrameDimension.Resolution; - else - return FrameDimension.Page; - } - } - - #endregion -
- #region Image read/write methods
-
- internal PlainImage ReadPlainImage() {
- awt.Image img = ReadImage( _currentFrame );
- if (img == null)
- return null;
-
- // its possible to fail to load thumbnails and metadata, but image is ok.
- awt.Image [] th = null;
-#if THUMBNAIL_SUPPORTED
- try {
- th = ReadThumbnails( _currentFrame );
- }
- catch (Exception) {}
-#endif
-
- XmlDocument md = null;
- imageio.metadata.IIOMetadata nativeMd = null;
- try {
- nativeMd = ReadImageMetadata( _currentFrame );
- md = ConvertImageMetadata( nativeMd );
- }
- catch (Exception) {}
-
- float [] resolution = GetResolution( md );
-
- PlainImage pi = new PlainImage( img, th, ImageFormat, resolution[0], resolution[1], FormatFrameDimesion );
- pi.NativeMetadata = nativeMd;
- return pi;
- }
-
- internal PlainImage ReadNextPlainImage() {
- _currentFrame++;
- return ReadPlainImage();
- }
-
- private awt.Image ReadImage(int frame) {
- if (NativeStream == null)
- throw new Exception("Input stream not specified");
-
- try {
- return NativeReader.read (frame); - } - catch (java.lang.IndexOutOfBoundsException) { - return null; - } - catch (java.io.IOException ex) { - throw new System.IO.IOException(ex.Message, ex); - } - }
-
-#if THUMBNAIL_SUPPORTED
- private awt.Image [] ReadThumbnails(int frameIndex) {
- awt.Image [] thArray = null; - - try { - if (NativeReader.readerSupportsThumbnails()) { - int tmbNumber = NativeReader.getNumThumbnails(frameIndex); - - if (tmbNumber > 0) { - thArray = new awt.Image[ tmbNumber ]; - - for (int i = 0; i < tmbNumber; i++) { - thArray[i] = NativeReader.readThumbnail(frameIndex, i); - } - } - }
- return thArray;
- }
- catch (java.io.IOException ex) { - throw new System.IO.IOException(ex.Message, ex); - } - }
-#endif
- internal void WritePlainImage(PlainImageCollection pic) {
- if ((pic == null) || (pic.Count == 0))
- return;
-
- if (pic.Count == 1) {
- WritePlainImage( pic[0] );
- return;
- }
-
- try {
- if (NativeWriter.canWriteSequence ()) {
- NativeWriter.prepareWriteSequence (null);
- for (int i=0; i < pic.Count; i++) {
- imageio.IIOImage iio = GetIIOImageContainer( pic[i] );
- NativeWriter.writeToSequence (iio, null);
- }
- NativeWriter.endWriteSequence ();
- }
- else
- WritePlainImage( pic[0] );
- }
- catch (java.io.IOException ex) { - throw new System.IO.IOException(ex.Message, ex); - } - }
-
- internal void WritePlainImage(PlainImage pi) {
- try {
- imageio.IIOImage iio = GetIIOImageContainer( pi );
- WriteImage( iio );
- }
- catch (java.io.IOException ex) { - throw new System.IO.IOException(ex.Message, ex); - }
- }
-
- private void WriteImage(imageio.IIOImage iio) {
- if (NativeStream == null)
- throw new Exception("Output stream not specified");
-
- NativeWriter.write( iio );
- }
-
- private imageio.IIOImage GetIIOImageContainer(PlainImage pi) {
- java.util.ArrayList al = null;
-
- // prepare thumbnails list
- if (pi.Thumbnails != null) {
- al = new java.util.ArrayList( pi.Thumbnails.Length );
- for (int i=0; i < pi.Thumbnails.Length; i++)
- al.add(pi.Thumbnails[i]);
- }
-
- // prepare IIOImage container
- if (pi.NativeImage is image.BufferedImage) {
- imageio.IIOImage iio = new javax.imageio.IIOImage(
- (image.BufferedImage)pi.NativeImage, al, null /*pi.NativeMetadata*/);
- return iio;
- }
- else
- // TBD: This codec is for raster formats only
- throw new NotSupportedException("Only raster formats are supported");
- }
-
-
- private imageio.metadata.IIOMetadata ReadImageMetadata(int frameIndex) {
- if (NativeStream == null)
- throw new Exception("Input stream not specified");
-
- try {
- imageio.metadata.IIOMetadata md = NativeReader.getImageMetadata( frameIndex );
- return md;
- }
- catch (java.io.IOException ex) { - throw new System.IO.IOException(ex.Message, ex); - } - }
-
- #endregion
-
- #region Extra properties
-
- public ImageFormat ImageFormat {
- get { return _imageFormat; }
- }
-
- #endregion
-
- #region Metadata parse
-
- private float [] GetResolution(XmlDocument metaData) {
- if (metaData == null)
- return new float[]{0, 0};
-
- ResolutionConfigurationCollection rcc = - (ResolutionConfigurationCollection) - ConfigurationSettings.GetConfig("system.drawing/codecsmetadata"); - - if (rcc == null) - throw new ConfigurationException("Configuration section codecsmetadata not found"); - - ResolutionConfiguration rc = rcc[ ImageFormat.ToString() ]; - - if (rc == null) - return new float[]{0, 0}; - - // Horizontal resolution - string xResPath = rc.XResPath; - string xRes; - - if (xResPath == string.Empty) - xRes = rc.XResDefault; - else - xRes = GetValueFromMetadata(metaData, xResPath); - - if ((xRes == null) || (xRes == string.Empty)) - xRes = rc.XResDefault; - - // Vertical resolution - string yResPath = rc.YResPath; - string yRes; - - if (yResPath == string.Empty) - yRes = rc.YResDefault; - else - yRes = GetValueFromMetadata(metaData, yResPath); - - if ((yRes == null) || (yRes == string.Empty)) - yRes = rc.YResDefault; - - // Resolution units - string resUnitsPath = rc.UnitsTypePath; - string resUnitsType; - - if (resUnitsPath == string.Empty) - resUnitsType = rc.UnitsTypeDefault; - else - resUnitsType = GetValueFromMetadata(metaData, resUnitsPath); - - if (resUnitsType == null) - resUnitsType = rc.UnitsTypeDefault; - - // Unit scale - string unitScale = rc.UnitsScale[resUnitsType].ToString(); - - // Adjust resolution to its units - float [] res = new float[2]; - res[0] = ParseFloatValue(xRes) * ParseFloatValue(unitScale); - res[1] = ParseFloatValue(yRes) * ParseFloatValue(unitScale); - - return res; - }
-
- private string GetValueFromMetadata(XmlDocument metaData, string path) {
- XmlNode n = metaData.SelectSingleNode(path);
- if (n == null)
- return null;
-
- return n.InnerText;
- }
-
- private XmlDocument ConvertImageMetadata(imageio.metadata.IIOMetadata metaData) {
- string [] formatNames = metaData.getMetadataFormatNames(); - dom.Element rootNode = (dom.Element) metaData.getAsTree(formatNames[0]); - - XmlDocument _metadataDocument = new XmlDocument();
- XmlConvert(rootNode, _metadataDocument);
-
- return _metadataDocument;
- }
-
- private void XmlConvert(dom.Node jNode, XmlNode nNode) {
- XmlDocument document = nNode.OwnerDocument;
- if (document == null)
- document = (XmlDocument)nNode;
-
- XmlNode n = null;
- switch (jNode.getNodeType()) {
- case 1 :
- n = document.CreateNode(XmlNodeType.Element, jNode.getNodeName(), jNode.getNamespaceURI());
- break;
-
- case 4 :
- n = document.CreateNode(XmlNodeType.CDATA, jNode.getNodeName(), jNode.getNamespaceURI());
- break;
-
- default:
- return;
- }
- //set value
- n.InnerText = jNode.getNodeValue();
- nNode.AppendChild( n );
-
- //copy attributes
- org.w3c.dom.NamedNodeMap nm = jNode.getAttributes();
- for (int i=0; i<nm.getLength(); i++) {
- XmlAttribute a = document.CreateAttribute( nm.item(i).getNodeName() );
- a.Value = nm.item(i).getNodeValue();
- n.Attributes.Append( a );
- }
-
- //copy childs
- org.w3c.dom.NodeList nl = jNode.getChildNodes();
- for (int i=0; i<nl.getLength(); i++) {
- XmlConvert(nl.item(i), n);
- }
- }
-
- protected virtual float ParseFloatValue(string strValue) {
- try {
- if ((strValue != null) && (strValue != "")) { - int dividerPos = strValue.IndexOf("/"); - - if (dividerPos < 0) { - return float.Parse(strValue); - } - else { - return float.Parse(strValue.Substring( 0, dividerPos )) / - float.Parse(strValue.Substring( dividerPos + 1 )); - } - }
- return float.NaN;
- }
- catch (Exception) {
- return float.NaN;
- }
- }
-
- #endregion
-
- #region IDisposable members
-
- public void Dispose() {
- if (NativeReader != null) {
- NativeReader.dispose();
- NativeReader = null;
- }
-
- if (NativeWriter != null) {
- NativeWriter.dispose();
- NativeWriter = null;
- }
- }
-
- #endregion
-
- }
-}
|