/// <summary> /// Gets an instance of an Image. /// </summary> /// <param name="url">an URL</param> /// <returns>an object of type Gif, Jpeg or Png</returns> public static Image GetInstance(Uri url) { Stream istr = null; try { WebRequest w = WebRequest.Create(url); istr = w.GetResponse().GetResponseStream(); int c1 = istr.ReadByte(); int c2 = istr.ReadByte(); int c3 = istr.ReadByte(); int c4 = istr.ReadByte(); // jbig2 int c5 = istr.ReadByte(); int c6 = istr.ReadByte(); int c7 = istr.ReadByte(); int c8 = istr.ReadByte(); istr.Close(); istr = null; if (c1 == 'G' && c2 == 'I' && c3 == 'F') { GifImage gif = new GifImage(url); Image img = gif.GetImage(1); return img; } if (c1 == 0xFF && c2 == 0xD8) { return new Jpeg(url); } if (c1 == 0x00 && c2 == 0x00 && c3 == 0x00 && c4 == 0x0c) { return new Jpeg2000(url); } if (c1 == 0xff && c2 == 0x4f && c3 == 0xff && c4 == 0x51) { return new Jpeg2000(url); } if (c1 == PngImage.PNGID[0] && c2 == PngImage.PNGID[1] && c3 == PngImage.PNGID[2] && c4 == PngImage.PNGID[3]) { Image img = PngImage.GetImage(url); return img; } if (c1 == 0xD7 && c2 == 0xCD) { Image img = new ImgWMF(url); return img; } if (c1 == 'B' && c2 == 'M') { Image img = BmpImage.GetImage(url); return img; } if ((c1 == 'M' && c2 == 'M' && c3 == 0 && c4 == 42) || (c1 == 'I' && c2 == 'I' && c3 == 42 && c4 == 0)) { RandomAccessFileOrArray ra = null; try { if (url.IsFile) { String file = url.LocalPath; ra = new RandomAccessFileOrArray(file); } else ra = new RandomAccessFileOrArray(url); Image img = TiffImage.GetTiffImage(ra, 1); img.url = url; return img; } finally { if (ra != null) ra.Close(); } } if ( c1 == 0x97 && c2 == 'J' && c3 == 'B' && c4 == '2' && c5 == '\r' && c6 == '\n' && c7 == 0x1a && c8 == '\n' ) { RandomAccessFileOrArray ra = null; try { if (url.IsFile) { String file = url.LocalPath; ra = new RandomAccessFileOrArray(file); } else ra = new RandomAccessFileOrArray(url); Image img = JBIG2Image.GetJbig2Image(ra, 1); img.url = url; return img; } finally { if (ra != null) ra.Close(); } } throw new IOException(url.ToString() + " is not a recognized imageformat."); } finally { if (istr != null) { istr.Close(); } } }
/// <summary> /// Gets an instance of an Image. /// </summary> /// <param name="img">a byte array</param> /// <returns>an object of type Gif, Jpeg or Png</returns> public static Image GetInstance(byte[] imgb) { int c1 = imgb[0]; int c2 = imgb[1]; int c3 = imgb[2]; int c4 = imgb[3]; if (c1 == 'G' && c2 == 'I' && c3 == 'F') { GifImage gif = new GifImage(imgb); return gif.GetImage(1); } if (c1 == 0xFF && c2 == 0xD8) { return new Jpeg(imgb); } if (c1 == 0x00 && c2 == 0x00 && c3 == 0x00 && c4 == 0x0c) { return new Jpeg2000(imgb); } if (c1 == 0xff && c2 == 0x4f && c3 == 0xff && c4 == 0x51) { return new Jpeg2000(imgb); } if (c1 == PngImage.PNGID[0] && c2 == PngImage.PNGID[1] && c3 == PngImage.PNGID[2] && c4 == PngImage.PNGID[3]) { return PngImage.GetImage(imgb); } if (c1 == 0xD7 && c2 == 0xCD) { return new ImgWMF(imgb); } if (c1 == 'B' && c2 == 'M') { return BmpImage.GetImage(imgb); } if ((c1 == 'M' && c2 == 'M' && c3 == 0 && c4 == 42) || (c1 == 'I' && c2 == 'I' && c3 == 42 && c4 == 0)) { RandomAccessFileOrArray ra = null; try { ra = new RandomAccessFileOrArray(imgb); Image img = TiffImage.GetTiffImage(ra, 1); if (img.OriginalData == null) img.OriginalData = imgb; return img; } finally { if (ra != null) ra.Close(); } } throw new IOException("The byte array is not a recognized imageformat."); }