酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows MobileでOpenNETCFを使って画像処理をおこなう

本記事では、OpenNETCFのSmart Device Frameworkを使って、簡単な画像処理をおこなう方法をご紹介しています。処理後の画像をピクチャーボックスに表示させています。

以下のサンプルコードでは、OpenNETCF.Drawing.dllが参照に追加されていることを前提としております。Smart Device Frameworkの導入方法については、こちらのページをご覧ください。

ここで紹介している画像処理は、OpenNETCFを使って画像を回転させたり、.NET Compact Frameworkでは実装されていないサムネイル画像を生成する方法です。

ピクチャーボックスへの画像の設定

ピクチャーボックスへ画像を表示するための基本の処理です。次の画像は実行例です。


C#
private void OpenMenuItem_Click(System.Object sender, 
                                System.EventArgs e)
{
    // 画像のファイルパス
    string ImageFilePath = "\\20090622093526.jpg";
    
    // ピクチャーボックスに画像を設定する
    PictureBox1.Image = new Bitmap(ImageFilePath);
}
VB.NET
Private Sub OpenMenuItem_Click(ByVal sender As System.Object, _
                               ByVal e As System.EventArgs) _
                               Handles OpenMenuItem.Click

    ' 表示する画像を選択する
    Dim ImageFilePath As String = "\20090622093526.jpg"

    ' ピクチャーボックスに画像を設定する
    PictureBox1.Image = New Bitmap(ImageFilePath)

End Sub

画像の回転処理

すでにピクチャーボックスに設定されている画像を時計回りに90度回転させます。次の画像は実行例です。


C#
private void RightRotateMenuItem_Click(System.Object sender, 
                                       System.EventArgs e)
{
    if(PictureBox1.Image == null) return;
  
    // 画像のファイルパス
    string ImageFilePath = "\\20090622093526.jpg";
    Bitmap srcBmp = New Bitmap(ImageFilePath);
    
    // 現在表示している画像を90度回転する
    OpenNETCF.Drawing.RotationAngle rotate 
      = OpenNETCF.Drawing.RotationAngle.Clockwise90;
    
    Bitmap RotatedBitmap 
      = OpenNETCF.Drawing.Imaging.ImageUtils.Rotate(
        (Bitmap)PictureBox1.Image, rotate);
    
    // ピクチャーボックスに画像を設定する
    PictureBox1.Image = RotatedBitmap;
}
VB.NET
' 画像を右回転させる
Private Sub RightRotateMenuItem_Click(ByVal sender As System.Object, _
                                      ByVal e As System.EventArgs)

    If (PictureBox1.Image Is Nothing) Then
        Return
    End If

    ' 現在表示している画像を90度回転する
    Dim rotate As OpenNETCF.Drawing.RotationAngle = _
        OpenNETCF.Drawing.RotationAngle.Clockwise90

    Dim RotatedBitmap As Bitmap = _
        OpenNETCF.Drawing.Imaging.ImageUtils.Rotate( _
            CType(PictureBox1.Image, Bitmap), rotate)

    ' ピクチャーボックスに画像を設定する
    PictureBox1.Image = RotatedBitmap

End Sub

サムネイル画像の生成

サムネイル画像の生成を行います。次の画像は実行例です。


C#
private void CreateThumMenuItem_Click(System.Object sender, System.EventArgs e)
{
    // 表示する画像を選択する
    string ImageFilePath = "\\20090622093526.jpg";
    
    // 画像のファイルパス
    System.IO.FileStream fs = 
      new System.IO.FileStream(ImageFilePath, IO.FileMode.Open);
    
    Size newSize = PictureBox1.Size;
    newSize.Width /= 2;
    newSize.Height /= 2;
    
    OpenNETCF.Drawing.Imaging.IBitmapImage bi = null;
    bi = OpenNETCF.Drawing.Imaging.ImageUtils.CreateThumbnail(fs, newSize);
    
    // ピクチャーボックスに画像を設定する
    PictureBox1.Image = 
      OpenNETCF.Drawing.Imaging.ImageUtils.IBitmapImageToBitmap(bi);
}
VB.NET
Private Sub CreateThumMenuItem_Click(ByVal sender As System.Object, _
                                     ByVal e As System.EventArgs)

    ' 表示する画像を選択する
    Dim ImageFilePath As String = "\20090622093526.jpg"

    ' 画像のファイルパス
    Dim fs As New System.IO.FileStream(ImageFilePath, IO.FileMode.Open)

    Dim newSize As Size = PictureBox1.Size
    With newSize
        .Width /= 2
        .Height /= 2
    End With

    Dim bi As OpenNETCF.Drawing.Imaging.IBitmapImage = Nothing
    bi = OpenNETCF.Drawing.Imaging.ImageUtils.CreateThumbnail( _
       fs, newSize)

    ' ピクチャーボックスに画像を設定する
    PictureBox1.Image = _
       OpenNETCF.Drawing.Imaging.ImageUtils.IBitmapImageToBitmap(bi)

End Sub

なお、今回使用させて頂いた画像はf:id:dancing_infobio:20090622093526jを使用させて頂きました。

OpenNETCF Smart Device Frameworkの導入に関しては、「OpenNETCF Smart Device Frameworkの導入 - 酢ろぐ!」をお読みください。