「Xamarin.Mac/System.Drawing.ImageをNSImageに変換する」の版間の差分
imported>Monobook 細 Monobook がページ「MonoMac/System.Drawing.ImageをNSImageに変換する」を「Xamarin.Mac/System.Drawing.ImageをNSImageに変換する」に移動しました |
imported>Monobook 編集の要約なし |
||
| 1行目: | 1行目: | ||
Xamarin.MacにおいてSystem.Drawing.ImageをAppKit.NSImageに変換する方法を試行錯誤している。 | |||
==方法1== | == 方法1 == | ||
NSImageは[[ファイル]]からのインスタンス生成はできるようだが、byte[]などのメモリ上の[[データ]]からのインスタンス生成はできない。 | |||
そこでCoreGraphicsのCGImageを経由して変換を行う。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
using System; | using System; | ||
| 9行目: | 9行目: | ||
using System.Drawing.Imaging; | using System.Drawing.Imaging; | ||
using System.IO; | using System.IO; | ||
using | using Foundation; | ||
using | using AppKit; | ||
using | using CoreGraphics; | ||
public static class | public static class NSImageExtensions | ||
{ | { | ||
public static NSImage ToNSImage(this Image image) | public static NSImage ToNSImage(this Image image) | ||
| 43行目: | 43行目: | ||
</source> | </source> | ||
System.Drawing.ImageからのNSImageへの変換はともかく、byte[]からNSImageインスタンスの生成は、[[プログラム]]中で[[ウェブ]]などから[[ファイル]] | System.Drawing.ImageからのNSImageへの変換はともかく、byte[]からNSImageインスタンスの生成は、[[プログラム]]中で[[ウェブ]]などから[[ファイル]]を落としてきて表示するようなアプリの場合にはほぼ登場する手法になると思われる。 | ||
==関連項目== | == 関連項目 == | ||
*[[ | * [[Xamarin.Mac]] | ||
*[[ | * [[Xamarin.Mac/NSImageをSystem.Drawing.Imageに変換する]] | ||
*[[MonoMac/NSImageをファイルに保存する]] | * [[MonoMac/NSImageをファイルに保存する]] | ||
*[[Xamarin.Mac/CGImageをNSImageに変換する]] | * [[Xamarin.Mac/CGImageをNSImageに変換する]] | ||
==参考文献== | ==参考文献== | ||
2017年6月19日 (月) 04:18時点における版
Xamarin.MacにおいてSystem.Drawing.ImageをAppKit.NSImageに変換する方法を試行錯誤している。
方法1
NSImageはファイルからのインスタンス生成はできるようだが、byte[]などのメモリ上のデータからのインスタンス生成はできない。 そこでCoreGraphicsのCGImageを経由して変換を行う。
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using Foundation;
using AppKit;
using CoreGraphics;
public static class NSImageExtensions
{
public static NSImage ToNSImage(this Image image)
{
NSImage nsImage = null;
byte[] buf = null;
// ImageをPNG形式でbyte[]に展開する。
using (var ms = new MemoryStream())
{
image.Save(ms, ImageFormat.Png);
buf = ms.ToArray();
}
// メモリ使用量を抑えるため、ここでMemoryStreamは破棄する。
// byte[]からNSImageを生成する。
if (null != buf)
{
using (var dp = new CGDataProvider(buf, 0, buf.Length))
using (var cg = CGImage.FromPNG(dp, null, false, CGColorRenderingIntent.Default))
{
nsImage = new NSImage(cg, new SizeF(cg.Width, cg.Height));
}
}
return nsImage;
}
}
System.Drawing.ImageからのNSImageへの変換はともかく、byte[]からNSImageインスタンスの生成は、プログラム中でウェブなどからファイルを落としてきて表示するようなアプリの場合にはほぼ登場する手法になると思われる。
関連項目
- Xamarin.Mac
- Xamarin.Mac/NSImageをSystem.Drawing.Imageに変換する
- MonoMac/NSImageをファイルに保存する
- Xamarin.Mac/CGImageをNSImageに変換する