「Xamarin.MacでNSImageをSystem.Drawing.Imageに変換する」を編集中
ナビゲーションに移動
検索に移動
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | + | [[MonoMac]]においてMonoMac.AppKit.NSImageをSystem.Drawing.Imageに変換する方法を試行錯誤している。 | |
==方法1== | ==方法1== | ||
7行目: | 7行目: | ||
using System.Drawing; | using System.Drawing; | ||
using System.IO; | using System.IO; | ||
− | using Foundation; | + | using MonoMac.Foundation; |
− | using AppKit; | + | using MonoMac.AppKit; |
public static class NSImageExtentions | public static class NSImageExtentions | ||
25行目: | 25行目: | ||
</source> | </source> | ||
− | + | なお、MonoMacのクラス群はほぼDisposeメソッドを実装しており、[[メモリリーク]]を防ぐために「using」が重要となる。 | |
− | 大容量の[[メモリ]]を搭載している昨今の[[Mac]]では多少の[[メモリリーク]] | + | 大容量の[[メモリ]]を搭載している昨今の[[Mac]]では多少の[[メモリリーク]]をする[[アプリ]]でも大して問題にならないが、MonoMac.QTKitを使った[[ビデオキャプチャ]]などでは1フレームごとに上記のような処理が走り、1/30秒や1/60秒といった速度で多種多様な[[インスタンス]]が生成され続けるため、Disposeを怠ると凄い勢いで[[メモリリーク]]することになる。 |
これに加えてビデオキャプチャではSystem.GC.Collectメソッドの手動実行も重要な場合がある。 | これに加えてビデオキャプチャではSystem.GC.Collectメソッドの手動実行も重要な場合がある。 | ||
ビデオキャプチャなどの常時負荷が高い状況化では[[ガベージコレクション]]の自動実行だけでは処理が追いつかない場合があるようだ。 | ビデオキャプチャなどの常時負荷が高い状況化では[[ガベージコレクション]]の自動実行だけでは処理が追いつかない場合があるようだ。 | ||
+ | |||
ちなみにSystem.GC.Collectをメインスレッド以外で実行しても効果がないようだ。 | ちなみにSystem.GC.Collectをメインスレッド以外で実行しても効果がないようだ。 | ||
凄い嵌った。 | 凄い嵌った。 | ||
− | == 関連項目 == | + | ==関連項目== |
− | * [[ | + | *[[MonoMac]] |
− | * [[ | + | *[[MonoMac/NSImageをファイルに保存する]] |
− | * [[ | + | *[[MonoMac/System.Drawing.ImageをNSImageに変換する]] |
− | == 参考文献 == | + | ==参考文献== |
{{reflist}} | {{reflist}} | ||
44行目: | 45行目: | ||
[[category:MonoMac]] | [[category:MonoMac]] | ||
− |