iOSで画像のサイズを指定して縮小する方法 | Xamarin.Forms
- 2017/05/17
- 02:35
以前の記事ではAndroidで画像を縮小する方法についてご紹介いたしました。
今回も引き続き、iOSで画像を縮小する方法についてご紹介いたします。

前提条件
・Windows10
・Visual Studio 2015 Community Update3
・Xamarin 4.3.0.784 (NuGet Xamarin.Forms 2.3.4.224)
・macOS Sierra 10.12.4 / Xcode8.3.1 / Xamarin.iOS 10.4.0.123
1.iOSでの記述方法
(1)iOSプロジェクト内に縮小する機能を持つクラスを記述します。ImageService.cs
using System.Drawing;
public class ImageService
{
public static UIImage ResizeImage(UIImage sourceImage, int width, int height)
{
UIGraphics.BeginImageContext(new SizeF(width, height));
sourceImage.Draw(new RectangleF(0, 0, width, height));
var resultImage = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
return resultImage;
}
/// <summary>
/// UIImageからバイト配列を取得する
/// </summary>
/// <param name="image">UIImage</param>
/// <returns></returns>
public static byte[] GetByteArray(UIImage image)
{
byte[] byteArray = null;
using (Stream imageStream = ImageService.GetStream(image))
{
using (MemoryStream ms = new MemoryStream())
{
imageStream.CopyTo(ms);
byteArray = ms.ToArray();
}
}
return byteArray;
}
}
※縦横比率の考慮はしておりませんので、考慮したい場合はResizeImageに縦横比率を加味する計算を入れてください。
(2)iOSプロジェクト内のイメージギャラリー(イメージピッカー)を表示して、戻り値を取得するクラスに以下の記述を追加します。
ImagePickerController.cs
protected void Handle_FinishedPickingMedia(object sender, UIImagePickerMediaPickedEventArgs e)
{
・・・
・・・
if (_imageView.Image != null)
{
//Imageコントロールのサイズを取得する
double width = 0;
double height = 0;
App.GetImageSize(ref width, ref height);
//画像を縮小する
UIImage resizedImage = ImageService.ResizeImage(_imageView.Image, (int)width, (int)height);
byte[] byteArray = ImageService.GetByteArray(resizedImage);
//画像をバインド
var imageSource = ImageSource.FromStream(() => new MemoryStream(byteArray));
App.SetPickupImageSource(imageSource);
}
this.DismissModalViewController(true);
}
※ImagePickerControllerについては「イメージギャラリーを表示して写真を取得する方法」の記事にてご紹介しています。
Androidの場合とは異なり、戻り値の画像をそのまま縮小可能ですので、DependencySerivceで記述する必要がなく、ネイティブで処理が可能です。
当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
http://itblogdsi.blog.fc2.com/blog-entry-81.html
- 関連記事
コピー&ペーストを実装する方法(クリップボード) | Xamarin.Forms ホーム
iPhone実機でデバッグするとVisual Studioがフリーズする原因について | Xamarin.Forms