【C#エクセル】画像をエクセルにドット絵で描画する

当ページのリンクには広告が含まれています。

スポンサーリンク

下の画像を見てください

私の大好きな ワンピースキャラクター「神・エネル」です。

この絵は エクセルに描かれており、セルの塗りつぶしで作ったドット絵です。

ちなみに、元となっている画像はコチラ↓

「いらすとや」さんから 画像を頂いて 使わせてもらいました m(__)m

エクセルへの描画は「C#」プログラミングで実行しています。

すべてのコードは「ChatGPT」で出力してもらい、そのコードを実行しただけです。

以下のような人の参考になればと思います。

  • エクセルでドット絵を作りたい人(いないか・・・?)
  • 「ChatGPT」に興味がある人
  • 「ChatGPT」をプログラミングに活用するアイデアを探している人

ソフトの概要」「どのように ChatGPT を使ったか」「完成までのプロセス」を解説します。

実用性のない情報ですが、興味のある人はぜひ見ていってください。

クリックしてジャンプ

動画:ChatGPTの活用!作ったアプリ実演

アプリの動画があるので見てみてください

動画では「ボルサリーノ(黄猿)」を描いています。

最初の1分はChatGPTとのやり取りの映像です。その後、アプリの実演が流れます。

※ 動画では BGM が流れます(仕事中の方はご注意を)

~1:00 ChatGPT とのやりとり

1:00~ アプリ実演

動画:アプリ開発の様子

アプリ開発の様子です、興味があれば見てください!

※ 動画では BGM が流れます(仕事中の方はご注意を)

解説:画像を エクセルに ドット絵で 描画する

アプリの動作説明

今回作ったアプリはC#言語でプログラミングした「WindowsForm アプリケーション」です。

Windows Form アプリケーション とは?

Microsoftが提供している「Visual Studio(ビジュアルスタジオ)」という開発環境があります。これは、コンピューターソフトを作るための工具箱のようなもので、無償のバージョンも提供されています。

この中に「Windows Form アプリケーション」というツールが含まれており、これを利用することで、Windows向けのアプリケーションの開発が可能です。

具体的には、ボタンやテキストなどの要素を直感的に配置することで、業務での使用に適したアプリケーションを手軽に作成することができます。

一連の流れは以下です

STEP
Cドライブの「GPTで暇つぶし」フォルダに、描きたい画像を格納
STEP
コード中の 画像パス を変更
STEP
デバック実行し、「button1」を押す
STEP
プログレスバーが100%になるまで待ち
STEP
処理が終われば「エクセル」が開く。完成!!

はいできあがり!!

ChatGPTとの対話

最初に依頼した時は「Python」で提案されました。

「Python」は不得意なので、「VBA」で実装したいと伝えましたが、言われた通りにやってもエラーが出て実現できませんでした。VBAでは処理しきれないような感じでした。

最後に「C#」で依頼し、完成に至りました。

ChatGPTに指示したこと

主に指示した内容は以下です。

  • 指定した画像を、自動でセルに描画(セルの塗りつぶし)するアプリを作りたい
  • C#で 実装する
  • 実行状況(進捗状況)が分かるような表示を出す(プログレスバー)
  • 処理が終わったら、メッセージボックスを出す
  • 処理が終わったら、プログレスバーは 0 にリセットする
  • セルは 格子状 に調整する
  • 画像サイズが大きい場合に、サイズダウンする処理を実装

最終的にChatGPTから出力されたコード

途中で分からない事、エラーが出てしまった事なども、ChatGPT へ伝えて、解決策を提示してもらいながら完成させました。

アプリ完成までにかかった時間は 30分ほど でした。

private void SetCellSize(Microsoft.Office.Interop.Excel.Worksheet worksheet, int maxRows, int maxCols, double width, double height)
{
    Microsoft.Office.Interop.Excel.Range range = worksheet.Range[worksheet.Cells[1, 1], worksheet.Cells[maxRows, maxCols]];
    range.RowHeight = height;
    range.ColumnWidth = width;
}


private Bitmap ResizeImageToFit(Bitmap originalImage, int maxWidth, int maxHeight)
{
    if (originalImage.Width <= maxWidth && originalImage.Height <= maxHeight)
        return originalImage;

    float ratioX = (float)maxWidth / originalImage.Width;
    float ratioY = (float)maxHeight / originalImage.Height;
    float ratio = Math.Min(ratioX, ratioY);

    int newWidth = (int)(originalImage.Width * ratio);
    int newHeight = (int)(originalImage.Height * ratio);

    Bitmap newImage = new Bitmap(newWidth, newHeight);
    using (Graphics graphics = Graphics.FromImage(newImage))
    {
        graphics.DrawImage(originalImage, 0, 0, newWidth, newHeight);
    }

    return newImage;
}


private void button1_Click(object sender, EventArgs e)
{
    string imagePath = @"C:\GPTで暇つぶし\キザル.png";
    ConvertImageToExcel(imagePath);
     // 処理が完了したら、メッセージボックスを表示
    MessageBox.Show("画像の描画が完了しました!", "完了", MessageBoxButtons.OK, MessageBoxIcon.Information);
     // プログレスバーの値を0にリセット
    progressBar1.Value = 0;
}

private void ConvertImageToExcel(string imagePath)
{
    var excelApp = new Microsoft.Office.Interop.Excel.Application();
    var workbook = excelApp.Workbooks.Add();
    var worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];

    using (Bitmap originalBitmap = new Bitmap(imagePath))
    {
        int maxRows = 150;  // これは調整可能です
        int maxCols = 150;  // これも調整可能です

        // セルのサイズを調整
        SetCellSize(worksheet, maxRows, maxCols, 0.5, 5);  // 幅と高さは調整可能です

        using (Bitmap resizedBitmap = ResizeImageToFit(originalBitmap, maxCols, maxRows))
        {
            progressBar1.Maximum = resizedBitmap.Height;
            progressBar1.Value = 0;

            for (int y = 0; y < resizedBitmap.Height; y++)
            {
                for (int x = 0; x < resizedBitmap.Width; x++)
                {
                    Color pixelColor = resizedBitmap.GetPixel(x, y);
                    var cell = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[y + 1, x + 1];
                    cell.Interior.Color = System.Drawing.ColorTranslator.ToOle(pixelColor);
                }
                progressBar1.Value = y + 1;
                Application.DoEvents();
            }
        }
    }

    excelApp.Visible = true;
}

開発の手順

「このアプリ作りたい!!」という、変な人の為に、手順を書き記します。

ChatGPTとのやり取りは、記事↑の YouTube動画に映ってたのが全てです。

アプリ開発の大まかな流れ

STEP
プロジェクト作成

Visual Studio 2022 でプロジェクトを作成

「Windows Form アプリケーション」を作成

STEP
コントロール配置

フォームに「ボタン」「プログレスバー」を配置

STEP
コードコピペ

ChatGPT が作ってくれたコードをコピペ

一部エラーが出るので、参照の追加(エクセルを操作するために必要)

配置したボタンに、クリックイベントを割り振る

コード中の「画像パス」は 自分の環境に合わせて変更する

STEP
デバック実行

デバック実行ボタンで、アプリを実行。

作成したフォームが表示されます。

ボタン(button1)を押すと、処理が走ります。

処理の進捗は「プログレスバー」で可視化してます。

処理が終われば、エクセルが開きます。

by ChatGPT

プログラミングの基本がわかっている人にとって、ChatGPTを利用するとアプリケーション開発は簡単に行えます。しかし、未経験の人には難しいかもしれません。

ChatGPTと効果的にコミュニケートするには、具体的なイメージを正確に伝える練習と慣れが必要です。

ChatGPTを上手に使う近道は、たくさんの実践を通じて慣れることです。

by ChatGPT

スポンサーリンク

クリックしてジャンプ