var pathPtr = Marshal.StringToHGlobalAnsi(inputFilePath);
try
{
-
SetInputPath(Handle, pathPtr).ThrowIfFailed("Failed to set input file path for decoding");
return await DecodeAsync();
}
private IEnumerable<BitmapFrame> RunDecoding()
{
- IntPtr outBuffer = IntPtr.Zero;
+ IntPtr outBuffer = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));
+ Marshal.WriteIntPtr(outBuffer, IntPtr.Zero);
try
{
- SetOutputBuffer(Handle, out outBuffer).ThrowIfFailed("Failed to decode given image");
+ SetOutputBuffer(Handle, outBuffer).ThrowIfFailed("Failed to decode given image");
DecodeRun(Handle, out var width, out var height, out var size).
ThrowIfFailed("Failed to decode");
- yield return new BitmapFrame(outBuffer, width, height, (int)size);
+ yield return new BitmapFrame(Marshal.ReadIntPtr(outBuffer), width, height, (int)size);
}
finally
{
- LibcSupport.Free(outBuffer);
+ if (Marshal.ReadIntPtr(outBuffer) != IntPtr.Zero)
+ {
+ LibcSupport.Free(Marshal.ReadIntPtr(outBuffer));
+ }
+
+ Marshal.FreeHGlobal(outBuffer);
}
}
internal static extern ImageUtilError SetInputBuffer(ImageDecoderHandle handle, byte[] srcBuffer, ulong srcSize);
[DllImport(Libraries.ImageUtil, EntryPoint = "image_util_decode_set_output_buffer")]
- internal static extern ImageUtilError SetOutputBuffer(ImageDecoderHandle handle, out IntPtr dstBuffer);
+ internal static extern ImageUtilError SetOutputBuffer(ImageDecoderHandle handle, IntPtr dstBuffer);
[DllImport(Libraries.ImageUtil, EntryPoint = "image_util_decode_set_colorspace")]
internal static extern ImageUtilError SetColorspace(ImageDecoderHandle handle, ImageColorSpace colorspace);