Click here to Skip to main content
15,920,603 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi
This code is for .Net 3.5. I am sorry, can anybody convert this code to .Net 2.0?

C#
public static class ImageHelper
 {
     const string errorMessage = "Could not recognise image format.";
     private static Dictionary<byte[], Func<BinaryReader, Size>> imageFormatDecoders = new Dictionary<byte[], Func<BinaryReader, Size>>()
 {
     { new byte[]{ 0x42, 0x4D }, DecodeBitmap},
     { new byte[]{ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61 }, DecodeGif },
     { new byte[]{ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 }, DecodeGif },
     { new byte[]{ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }, DecodePng },
     { new byte[]{ 0xff, 0xd8 }, DecodeJfif },
 };
     /// <summary>
     /// Gets the dimensions of an image.
     /// </summary>
     /// <param name="path">The path of the image to get the dimensions of.</param>
     /// <returns>The dimensions of the specified image.</returns>
     /// <exception cref="ArgumentException">The image was of an unrecognised format.</exception>
     public static Size GetDimensions(string path)
     {
         using (BinaryReader binaryReader = new BinaryReader(File.OpenRead(path)))
         {
             try
             {
                 return GetDimensions(binaryReader);
             }
             catch (ArgumentException e)
             {
                 if (e.Message.StartsWith(errorMessage))
                 {
                     throw new ArgumentException(errorMessage, "path", e);
                 }
                 else
                 {
                     throw e;
                 }
             }
         }
     }
     /// <summary>
     /// Gets the dimensions of an image.
     /// </summary>
     /// <param name="path">The path of the image to get the dimensions of.</param>
     /// <returns>The dimensions of the specified image.</returns>
     /// <exception cref="ArgumentException">The image was of an unrecognised format.</exception>
     public static Size GetDimensions(BinaryReader binaryReader)
     {
         int maxMagicBytesLength = imageFormatDecoders.Keys.OrderByDescending(x => x.Length).First().Length;
         byte[] magicBytes = new byte[maxMagicBytesLength];
         for (int i = 0; i < maxMagicBytesLength; i += 1)
         {
             magicBytes[i] = binaryReader.ReadByte();
             foreach (var kvPair in imageFormatDecoders)
             {
                 if (magicBytes.StartsWith(kvPair.Key))
                 {
                     return kvPair.Value(binaryReader);
                 }
             }
         }
         throw new ArgumentException(errorMessage, "binaryReader");
     }
     private static bool StartsWith(this byte[] thisBytes, byte[] thatBytes)
     {
         for (int i = 0; i < thatBytes.Length; i += 1)
         {
             if (thisBytes[i] != thatBytes[i])
             {
                 return false;
             }
         }
         return true;
     }
     private static short ReadLittleEndianInt16(this BinaryReader binaryReader)
     {
         byte[] bytes = new byte[sizeof(short)];
         for (int i = 0; i < sizeof(short); i += 1)
         {
             bytes[sizeof(short) - 1 - i] = binaryReader.ReadByte();
         }
         return BitConverter.ToInt16(bytes, 0);
     }
     private static int ReadLittleEndianInt32(this BinaryReader binaryReader)
     {
         byte[] bytes = new byte[sizeof(int)];
         for (int i = 0; i < sizeof(int); i += 1)
         {
             bytes[sizeof(int) - 1 - i] = binaryReader.ReadByte();
         }
         return BitConverter.ToInt32(bytes, 0);
     }
     private static Size DecodeBitmap(BinaryReader binaryReader)
     {
         binaryReader.ReadBytes(16);
         int width = binaryReader.ReadInt32();
         int height = binaryReader.ReadInt32();
         return new Size(width, height);
     }
     private static Size DecodeGif(BinaryReader binaryReader)
     {
         int width = binaryReader.ReadInt16();
         int height = binaryReader.ReadInt16();
         return new Size(width, height);
     }
     private static Size DecodePng(BinaryReader binaryReader)
     {
         binaryReader.ReadBytes(8);
         int width = binaryReader.ReadLittleEndianInt32();
         int height = binaryReader.ReadLittleEndianInt32();
         return new Size(width, height);
     }
     private static Size DecodeJfif(BinaryReader binaryReader)
     {
         while (binaryReader.ReadByte() == 0xff)
         {
             byte marker = binaryReader.ReadByte();
             short chunkLength = binaryReader.ReadLittleEndianInt16();
             if (marker == 0xc0)
             {
                 binaryReader.ReadByte();
                 int height = binaryReader.ReadLittleEndianInt16();
                 int width = binaryReader.ReadLittleEndianInt16();
                 return new Size(width, height);
             }
             binaryReader.ReadBytes(chunkLength - 2);
         }
         throw new ArgumentException(errorMessage);
     }
 }
Posted
Updated 8-Oct-10 1:42am
v3

C#
int maxMagicBytesLength = imageFormatDecoders.Keys.OrderByDescending(x => x.Length).First().Length;

You have to use delegates .net 2.0 way, not .net 3.5 lambda expressions.
Just look for lambda expressions on msdn. You will not lose anything if you learn this simple concept. You will then easily be able to convert it to .net 2.0 standard delegates.
 
Share this answer
 
If you use VS 2008 or 2010 you can simply change the target framework from 3.5 to 2.0. Then when you try to compile, you will get errors telling you exactly what you need to change.

Most likely, you don't need to make that many changes - if any at all...

You could also try this:

SolutionConverter[^]
 
Share this answer
 
Comments
pedpedo 8-Oct-10 9:04am    
that do not work for this code , I hope to handle this code anybody :
int maxMagicBytesLength = imageFormatDecoders.Keys.OrderByDescending(x => x.Length).First().Length;
make a back up first and then use the Web Project Conversion Wizard to migrate your application. Theres lots of useful information here:

Upgrade from ASP.NET 1.x
http://msdn2.microsoft.com/en-us/asp.net/aa336650.aspx
 
Share this answer
 
Comments
pedpedo 8-Oct-10 5:37am    
this code is for .net 3.5 , But I need .net code , this way is not possible .
[no name] 8-Oct-10 6:26am    
hmm - why do you need 2.0, whats wrong with upgrading to 3.5?
do you have 2.0 on your machine? what happens if you just copy/paste into it?
pedpedo 8-Oct-10 6:45am    
My software use .net 2.0 , that is why I use this .

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900