dotnet / dotnet/macios

CGImageDestination::Close is a non-obvious API for saving images

Open
#9,058 3 comments 0 reactions 0 assignees View on GitHub
documentation enhancement iOS
Dominant language
C#
Stars
2.9k
Forks
576
Avg merge
2d 13h
Merged PRs (30d)
96

Description

# Sample to Reproduce

```cs
CGImage img = assetImageGenerator.CopyCGImageAtTime(...);
NSUrl outputUrl = NSUrl.FromFilename(...);

//...

using (var imageDestination = CGImageDestination.Create(outputUrl, UTType.PNG, 1))
{
imageDestination.AddImage(img);
}
```

### Expected Behavior

Image will be saved, `imageDestination` disposed.

### Actual Behavior

Image won't be saved.

Need manually call [.Close()](https://github.com/xamarin/xamarin-macios/blob/main/src/ImageIO/CGImageDestination.cs#L298-L303) method to make `CGImageDestinationFinalize`:

```cs
using (var imageDestination = CGImageDestination.Create(fileUrl, UTType.PNG, 1))
{
imageDestination.AddImage(img);
imageDestination.Close();
}

// or

var imageDestination = CGImageDestination.Create(fileUrl, UTType.PNG, 1);
imageDestination.AddImage(img);
imageDestination.Close();
```

Looks like [tests](https://github.com/xamarin/xamarin-macios/blob/main/tests/monotouch-test/ImageIO/ImageDestinationTest.cs#L96-L98) don't work in reality.

### Environment

```
=== Visual Studio Community 2019 for Mac ===

Version 8.6.5 (build 23)
Installation UUID: 718c9426-9b34-4dad-a550-66605f1e5527
GTK+ 2.24.23 (Raleigh theme)
Xamarin.Mac 6.18.0.23 (d16-6 / 088c73638)

Package version: 610000104

=== Mono Framework MDK ===

Runtime:
Mono 6.10.0.104 (2019-12/5d03a6fe116) (64-bit)
Package version: 610000104

=== Roslyn (Language Service) ===

3.6.0-3.20210.9+4eafdcb1bcbd8d3573f2ba6065e56d9b9ce4f8a3

=== NuGet ===

Version: 5.6.0.6591

=== .NET Core SDK ===

SDK: /usr/local/share/dotnet/sdk/3.1.301/Sdks
SDK Versions:
3.1.301
3.1.300
3.1.202
3.1.200
3.1.102
MSBuild SDKs: /Library/Frameworks/Mono.framework/Versions/6.10.0/lib/mono/msbuild/Current/bin/Sdks

=== .NET Core Runtime ===

Runtime: /usr/local/share/dotnet/dotnet
Runtime Versions:
3.1.5
3.1.4
3.1.2
2.1.19
2.1.18
2.1.17
2.1.16

=== Xamarin.Profiler ===

'/Applications/Xamarin Profiler.app' not found

=== Updater ===

Version: 11

=== Apple Developer Tools ===

Xcode 11.5 (16139)
Build 11E608c

=== Xamarin.Android ===

Version: 10.3.1.4 (Visual Studio Community)
Commit: xamarin-android/d16-6/3a10de9
Android SDK: /Users/yauhenipakala/Library/Developer/Xamarin/android-sdk-macosx
Supported Android versions:
7.0 (API level 24)
8.0 (API level 26)
8.1 (API level 27)

SDK Tools Version: 26.1.1
SDK Platform Tools Version: 29.0.6
SDK Build Tools Version: 30.0.0 rc2

Build Information:
Mono: 165f4b0
Java.Interop: xamarin/java.interop/d16-6@2cab35c
ProGuard: xamarin/proguard/master@905836d
SQLite: xamarin/sqlite/3.31.1@49232bc
Xamarin.Android Tools: xamarin/xamarin-android-tools/d16-6@bfb66f3

=== Microsoft OpenJDK for Mobile ===

Java SDK: /Users/yauhenipakala/Library/Developer/Xamarin/jdk/microsoft_dist_openjdk_1.8.0.25
1.8.0-25
Android Designer EPL code available here:
https://github.com/xamarin/AndroidDesigner.EPL

=== Android SDK Manager ===

Version: 16.6.0.50
Hash: 5901879
Branch: remotes/origin/d16-6
Build date: 2020-06-10 22:42:50 UTC

=== Android Device Manager ===

Version: 16.6.0.96
Hash: 6e8b80b
Branch: remotes/origin/d16-6
Build date: 2020-06-10 22:43:28 UTC

=== Xamarin Designer ===

Version: 16.6.0.329
Hash: d4f8bcd13
Branch: remotes/origin/d16-6
Build date: 2020-04-24 02:16:02 UTC

=== Xamarin.Mac ===

Version: 6.18.2.1 (Visual Studio Community)
Hash: 29c4ea731
Branch: d16-6
Build date: 2020-05-26 17:03:04-0400

=== Xamarin.iOS ===

Version: 13.18.2.1 (Visual Studio Community)
Hash: 29c4ea731
Branch: d16-6
Build date: 2020-05-26 17:03:05-0400

=== Build Information ===

Release ID: 806050023
Git revision: 5289d413b99fddfc20b4ecf3e445ccb822213427
Build date: 2020-06-18 12:08:30-04
Build branch: release-8.6
Xamarin extensions: 5289d413b99fddfc20b4ecf3e445ccb822213427

=== Operating System ===

Mac OS X 10.15.5
Darwin 19.5.0 Darwin Kernel Version 19.5.0
Tue May 26 20:41:44 PDT 2020
root:xnu-6153.121.2~2/RELEASE_X86_64 x86_64

=== Enabled user installed extensions ===

BinObjCleaner 1.5
MonoDevelop.TouchBar 1.0.3
DT.VS4Mac.SolutionName 1.2
Code Coverage 2.0.1-alpha

```

### Example Project (If Possible)

https://github.com/wcoder/Xamarin-Video-Thumbnail-Demo

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.