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); }
public static void FreeImageData(ref ImageData data) { if (IntPtr.Size == 8) { IO_x64.FreeImageData(ref data); } else { IO_x86.FreeImageData(ref data); } }
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); } }