【C#エクセル】画像をエクセルにドット絵で描画する
下の画像を見てください
私の大好きな ワンピースキャラクター「神・エネル」です。
この絵は エクセルに描かれており、セルの塗りつぶしで作ったドット絵です。
ちなみに、元となっている画像はコチラ↓
「いらすとや」さんから 画像を頂いて 使わせてもらいました m(__)m
エクセルへの描画は「C#」プログラミングで実行しています。
すべてのコードは「ChatGPT」で出力してもらい、そのコードを実行しただけです。
以下のような人の参考になればと思います。
- エクセルでドット絵を作りたい人(いないか・・・?)
- 「ChatGPT」に興味がある人
- 「ChatGPT」をプログラミングに活用するアイデアを探している人
「ソフトの概要」「どのように ChatGPT を使ったか」「完成までのプロセス」を解説します。
実用性のない情報ですが、興味のある人はぜひ見ていってください。
動画:ChatGPTの活用!作ったアプリ実演
アプリの動画があるので見てみてください
動画では「ボルサリーノ(黄猿)」を描いています。
最初の1分はChatGPTとのやり取りの映像です。その後、アプリの実演が流れます。
※ 動画では BGM が流れます(仕事中の方はご注意を)
~1:00 ChatGPT とのやりとり
1:00~ アプリ実演
動画:アプリ開発の様子
アプリ開発の様子です、興味があれば見てください!
※ 動画では BGM が流れます(仕事中の方はご注意を)
解説:画像を エクセルに ドット絵で 描画する
アプリの動作説明
今回作ったアプリはC#言語でプログラミングした「WindowsForm アプリケーション」です。
Microsoftが提供している「Visual Studio(ビジュアルスタジオ)」という開発環境があります。これは、コンピューターソフトを作るための工具箱のようなもので、無償のバージョンも提供されています。
この中に「Windows Form アプリケーション」というツールが含まれており、これを利用することで、Windows向けのアプリケーションの開発が可能です。
具体的には、ボタンやテキストなどの要素を直感的に配置することで、業務での使用に適したアプリケーションを手軽に作成することができます。
一連の流れは以下です
はいできあがり!!
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動画に映ってたのが全てです。
アプリ開発の大まかな流れ
Visual Studio 2022 でプロジェクトを作成
「Windows Form アプリケーション」を作成
フォームに「ボタン」「プログレスバー」を配置
ChatGPT が作ってくれたコードをコピペ
一部エラーが出るので、参照の追加(エクセルを操作するために必要)
配置したボタンに、クリックイベントを割り振る
コード中の「画像パス」は 自分の環境に合わせて変更する
デバック実行ボタンで、アプリを実行。
作成したフォームが表示されます。
ボタン(button1)を押すと、処理が走ります。
処理の進捗は「プログレスバー」で可視化してます。
処理が終われば、エクセルが開きます。
by ChatGPT
プログラミングの基本がわかっている人にとって、ChatGPTを利用するとアプリケーション開発は簡単に行えます。しかし、未経験の人には難しいかもしれません。
ChatGPTと効果的にコミュニケートするには、具体的なイメージを正確に伝える練習と慣れが必要です。
ChatGPTを上手に使う近道は、たくさんの実践を通じて慣れることです。
by ChatGPT