[C#] DataGridView に行を追加する(テキストとイメージの回転)

Pocket

ここでは、C# フォームアプリケーションで頻繁に使用されるDataGridView に行を追加するサンプルプログラムを掲載しています。

スポンサーリンク

 

DataGridViewRow をフォームに貼り付け

ここで紹介するサンプルコードは、フォームに貼り付けたDataGridViewコント―ロール(DataGridView1)があるものとします。また、1列目にはテキスト項目を、2列目にはイメージ項目が割り当てられているものとします。

 

DataGridView に列を追加するサンプルコード

では、以下のサンプルコードをご確認ください。詳細はコメントを参照ください。


    string col1Str = "斎藤さんだぞ" // 追加する列1のテキスト
    Image  col2Img;                // 追加する列2の画像
    
    // 画像をファイルから取得する
    using (FileStream fs = new FileStream(@”/path/to/image.jpeg”, FileMode.Open, FileAccess.Read))
    {
        col2Img = Image.FromStream(fs);
    }

    // 追加行のインスタンス生成
    DataGridViewRow newRow = new DataGridViewRow();
    // セルを追加
    newRow.CreateCells(DataGridView1, new object[]
    {
        col1Str,
        col2Img,
    });
    // DataGridViewに行を新規追加
    DataGridView1.Rows.Add(newRow);

上記のサンプルでDataGridView にテキストとイメージを含む行を追加することができますが、DataGridViewは、回転情報を含む画像を正しく表示してくれません。回転情報を無視してしまいます。

次のサンプルコードでは、画像の回転情報から画像を回転させています。

 

EXIF情報を元に画像を回転させる(90度、180度、360度)

上記サンプル内の画像ファイルから Image を取得している部分を以下のように修正して、画像を回転することができます。


    using (FileStream fs = new FileStream(@”/path/to/image.jpeg”, FileMode.Open, FileAccess.Read))
    {
        col2Img = Image.FromStream(fs);

        // 画像に付与されているEXIF情報から回転情報を取得して、画像を回転させる
        foreach (var item in col2Img.PropertyItems)
        {
            // 回転情報設定(0x0112; Orientationの値)以外はスキップ
            if (item.Id != 0x0112) { continue; }
                    
            switch (item.Value[0])
            {
                case 3: // 180度
                    col2Img.RotateFlip(RotateFlipType.Rotate180FlipNone);
                    break;
                case 6: // 90度
                    col2Img.RotateFlip(RotateFlipType.Rotate90FlipNone);
                    break;
                case 8: // 270度
                    col2Img.RotateFlip(RotateFlipType.Rotate270FlipNone);
                    break;
            }
        }
    }

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *