Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

using System;
using System.Runtime.InteropServices;
using System.Text;

// Application namespace - change this to match your application if needed
namespace J2K_CodecPrj
{
        public abstract class J2KCodec
        {
                // Returns codec version and build number in the 0x105678 form, where
                // 10 is a version (1.0) and 5678 is a build number.
                [DllImport("j2k-codec", EntryPoint="_J2K_getVersion@0")]
                public static extern uint GetVersion();
               
                // Returns the code of last error. Use GetErrorString() to get
                // textual description of the error.
                [DllImport("j2k-codec", EntryPoint="_J2K_getLastError@0")]
                public static extern J2KError GetLastError();
               
                [DllImport("j2k-codec", EntryPoint="_J2K_getErrorStrVB@8")]
                private static extern void _GetErrorString(J2KError errCode, StringBuilder errStr);

                // Returns the textual description of an error by the error code
                // obtained from getLastError().
                public static string GetErrorString(J2KError errCode)
                {
                        StringBuilder sb = new StringBuilder(2048);
                        _GetErrorString(errCode, sb);
                        return sb.ToString();
                }

                // Returns the textual description of the last error.
                public static string GetLastErrorString()
                {
                        return GetErrorString(GetLastError());
                }

                // This function unlocks the full functionality of J2K-Codec. After you
                // have purchased your personal registration key, you need to pass it
                // to this function.
                [DllImport("j2k-codec", EntryPoint="_J2K_Unlock@4")]
                public static extern void Unlock(string key);


                // This function creates a log-file and starts logging debug messages of J2K-Codec.
                // 'level' can be Normal or Detailed.
                // Passing append as true will append the log session to existing log-file.
                // Returns 0 if there was no error.
                // NOTES:
                //  1. Log-file name is 'j2k-codec.log'
                //  2. The performance will degrade significantly if the logging is on.
                [DllImport("j2k-codec", EntryPoint="_J2K_StartLogging@8")]
                public static extern J2KError StartLogging(J2KLogLevel level, bool append);

                // Use this function to stop logging, initiated by StartLogging().
                [DllImport("j2k-codec", EntryPoint="_J2K_StopLogging@0")]
                public static extern void StopLogging(int level, bool append);

                // Open an image from a file with given name.
                [DllImport("j2k-codec", EntryPoint="_J2K_OpenFile@4")]
                public static extern IntPtr OpenFile(string fileName);

                // Open the image from a buffer with 'size' length
                [DllImport("j2k-codec", EntryPoint="_J2K_OpenFile@4")]
                public static extern IntPtr OpenMemory(byte[] buffer, uint size);

                // Get size information from the image
                [DllImport("j2k-codec", EntryPoint="_J2K_GetInfo@16")]
                public static extern J2KError GetInfo(IntPtr image, out int width, out int height, out int components);

                // Get more detailed information from the image
                [DllImport("j2k-codec", EntryPoint="_J2K_GetInfoEx@8")]
                public static extern J2KError GetInfoEx(IntPtr image, out J2KInfo info);


                // Get meta data, embedded into the JP2 image. See help file for parameter explanation
                [DllImport("j2k-codec", EntryPoint="_J2K_GetInfoEx@8")]
                public static extern J2KError GetMetaData(IntPtr image, ref int no, ref J2KMetadata type, ref IntPtr data, ref int size);

                // Decodes the image, previously created with Open(). If 'buffer' is
                // null, then the required amount of memory is allocated and its size
                // returned through the 'size' argument. pitch - distance, in bytes, to
                // the start of next line. For options see help file.
                [DllImport("j2k-codec", EntryPoint="_J2K_Decode@20")]
                public static extern J2KError Decode(IntPtr image, ref IntPtr buffer, ref int size, string options, ref int pitch);

                // Selects or unselects a tile or a tile range, depending on 'select'.
                // If select is true then the tiles are selected for decoding,
                // otherwise they are unselected. The range is defined by start and end
                // tile numbers (inclusive) in the raster order. If end_tile==-1 then
                // the max tile number will be used instead.
                [DllImport("j2k-codec", EntryPoint="_J2K_SelectTiles@16")]
                public static extern J2KError SelectTiles(IntPtr image, int startTile, int endTile, bool select);

                // Gets the number of available resolution levels.
                [DllImport("j2k-codec", EntryPoint="_J2K_GetResolutions@8")]
                public static extern J2KError GetResolutions(IntPtr image, ref int resolutions);

                // Gets the dimensions of a resolution level.
                [DllImport("j2k-codec", EntryPoint="_J2K_GetResolutionDimensions@16")]
                public static extern J2KError GetResolutionDimensions(IntPtr image, int resLevel, out int width, out int height);


                // Cancels Decode() operations.
                [DllImport("j2k-codec", EntryPoint="_J2K_Cancel@4")]
                public static extern J2KError Cancel(IntPtr image);

                // Destroys the image, previously created by Open(). All images must
                // be closed using this function to avoid memory leaks.
                [DllImport("j2k-codec", EntryPoint="_J2K_Close@4")]
                public static extern J2KError Close(IntPtr image);
        }

        public enum J2KError
        {
                Success = 0,
                NeedMMX,
                NotEnoughMemory,
                CorruptedData,
                PipeFailure,
                InvalidArgument,
                Canceled,
                CantOpenFile,
                OptionUnrecognized,
                NoSuchTile,
                NoSuchResolution,
                BppTooSmall,
                BufferTooSmall,
                NotPart1Format,
                ImageIsTooLarge,
                TooManyResLevel,
                TooLargeCodeblocks,
                NoLaziness,
                NoVcausal,
                TooManyComponents,
                Only8BitComponents,
                OnlyUnsigComponents,
                DownsampledComponents,
                RoiNotSupported,
                ProgrChangeNotSup,
                PacketHeadersNotSup,
                No64BitSupport,
                InternalError
        }

        public enum J2KLogLevel
        {
                Normal = 0,
                Detailed = 1,
                All = 1
        }

        public enum J2KMetadata
        {
                CommentStr,
                CommentBin,
                Geotiff,
                Xml,
                Url,
                Pal,
                Icc,
                Unknown
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct J2KInfo
        {
                public int Version;
                public int Width;
                public int Height;
                public int Components;
                public int FileType;
                public int HorizontalTiles;
                public int VerticalTiles;
        }
}