コード例 #1
0
        public static unsafe CodecError DecodeFile(Stream input, out ImageData output)
        {
            StreamIOCallbacks streamCallbacks = new StreamIOCallbacks(input);
            IOCallbacks       callbacks       = new IOCallbacks()
            {
                Read  = new ReadDelegate(streamCallbacks.Read),
                Write = new WriteDelegate(streamCallbacks.Write),
                Seek  = new SeekDelegate(streamCallbacks.Seek)
            };

            CodecError result;

            if (IntPtr.Size == 8)
            {
                result = IO_x64.DecodeFile(callbacks, out output);
            }
            else
            {
                result = IO_x86.DecodeFile(callbacks, out output);
            }

            GC.KeepAlive(callbacks);
            GC.KeepAlive(streamCallbacks);

            return(result);
        }
コード例 #2
0
 public static void FreeImageData(ref ImageData data)
 {
     if (IntPtr.Size == 8)
     {
         IO_x64.FreeImageData(ref data);
     }
     else
     {
         IO_x86.FreeImageData(ref data);
     }
 }
コード例 #3
0
        public static void EncodeFile(IntPtr inData, int width, int height, int stride, int channelCount, EncodeParams parameters, Stream output)
        {
            StreamIOCallbacks streamCallbacks = new StreamIOCallbacks(output);
            IOCallbacks       callbacks       = new IOCallbacks()
            {
                Read  = new ReadDelegate(streamCallbacks.Read),
                Write = new WriteDelegate(streamCallbacks.Write),
                Seek  = new SeekDelegate(streamCallbacks.Seek)
            };

            CodecError result;

            if (IntPtr.Size == 8)
            {
                result = IO_x64.EncodeFile(inData, width, height, stride, channelCount, parameters, callbacks);
            }
            else
            {
                result = IO_x86.EncodeFile(inData, width, height, stride, channelCount, parameters, callbacks);
            }
            GC.KeepAlive(callbacks);
            GC.KeepAlive(streamCallbacks);

            if (result != CodecError.Ok)
            {
                string message = string.Empty;
                switch (result)
                {
                case CodecError.InitFailed:
                    message = Resources.InitFailed;
                    break;

                case CodecError.OutOfMemory:
                    throw new OutOfMemoryException();

                case CodecError.EncodeFailure:
                    message = Resources.EncodeFailure;
                    break;

                case CodecError.ImageBufferWrite:
                    message = Resources.ImageBufferWrite;
                    break;
                }

                throw new FormatException(message);
            }
        }