C#にて、イメージ画像の分割
C#言語にて現在パズルゲームを作成しようと考えています。
パズルに使用するピースですが、ユーザが任意に選択した画像をプログラミングで規定の画像サイズに切り出し、それをパズルピースとして使用する仕様を考えています。
ファイルを開くボタン押下で、OpenFileDialogを表示し、ユーザに任意のイメージ画像を選択させます。その選択された画像を58pixcelx58pixcelのサイズの画像を9x6の54枚(パズルピース)に分割します。
以下がその仕様を考えたソースコードです。
private void selectButton_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
imageShow(openFileDialog.FileName);
}
private void imageShow(string filePath)
{
Bitmap _bmp = new Bitmap(58, 58);
Image originalImage = Image.FromFile(filePath);
Graphics g = Graphics.FromImage(_bmp);
Rectangle rect;
int x = 0;
int y = 0;
string title = "C:\\Image";
int index = 0;
for (x = 0; x < 9; x++) {
for (y = 0; y < 6; y++) {
index++;
rect = new Rectangle((x * 58) , (58 * y), 58, 58);
g.DrawImage(originalImage, 0, 0, rect, GraphicsUnit.Pixel);
_bmp.Save(title + index.ToString()+ ".jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
Thread.Sleep(50);
}
y = 0;
}
}
パズルピースとして使用する予定のサイズ58x58のBitmapを作成します。そのBitmapからGraphicsを作成し、Graphicsに対してDrawImageでオリジナル画像(ユーザが選択した画像)を58Pixcelごとに分割し、分割されて作成されたImageをSave()にてファイル保存しています。
この仕様で一応ファイルは分割されて作成されるのですが、どうも画像の位置が合わないのです。画質も悪いですし。手動で同じオリジナルファイルを58Pixcelごとに切り出したものと比較しますと顕著にちがいます。
何か足りない処理や、他の対応策がございましたらご教授のほどよろしくお願いいたします。今回の仕様で、切り出したファイルをローカルマシンに保存する、と言うのは必須事項になっております。
どうか皆様よろしくお願いいたします。
お礼
早速のご回答ありがとうございました。やはり、あったらいいな、と思うものはあるんですね。3番目のimghtmを使ってみて感動しました。本当にありがとうございました。