C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: イメージ画像を分割し、分割したイメージをファイル保存する方法


(過去ログ 11 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■2429 / inTopicNo.1)  イメージ画像を分割し、分割したイメージをファイル保存する方法
  
□投稿者/ アルテイシア (1回)-(2007/04/07(Sat) 00:24:38)

分類:[C# (Windows)] 

開発環境はC# .NETです。
VisualStudio2005を使用してコーディングを行っています。
現在パズルゲームを作成しようと考えています。
パズルに使用するピースですが、ユーザが任意に選択した画像をプログラミングで規定の画像サイズに切り出し、それをパズルピースとして使用する仕様を考えています。

ファイルを開くボタン押下で、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ごとに切り出したものと比較しますと顕著にちがいます。

何か足りない処理や、他の対応策がございましたらご教授のほどよろしくお願いいたします。今回の仕様で、切り出したファイルをローカルマシンに保存する、と言うのは必須事項になっております。
どうか皆様よろしくお願いいたします。

引用返信 編集キー/
■2432 / inTopicNo.2)  Re[1]: イメージ画像を分割し、分割したイメージをファイル保存する方法
□投稿者/ オノデラ (12回)-(2007/04/07(Sat) 13:51:43)
オノデラ さんの Web サイト
> _bmp.Save(title + index.ToString()+ ".jpg",System.Drawing.Imaging.ImageFormat.Jpeg);

 Jpeg ファイルで保存すると画質が落ちるということは認識されているかと思いますが、そういうレベルではないくらいに画質が落ちるということでしょうか?

(個人的には .bmp や .png で保存したい派なんですが(^^))

引用返信 編集キー/
■2444 / inTopicNo.3)  Re[2]: イメージ画像を分割し、分割したイメージをファイル保存する方法
□投稿者/ アルテイシア (2回)-(2007/04/08(Sun) 20:44:59)
ご返信ありがとうございます。

>  Jpeg ファイルで保存すると画質が落ちるということは認識されているかと思いますが、そういうレベルではないくらいに画質が落ちるということでしょうか?
オリジナル画像がJPEG画像だったので、JPEG画像で保存しても特に画質が落ちるとは思わなかったのです。
なんとなくピントがぼけているような画像になってしまっていたので、それが少し残念で…。

当方としては、オリジナル画像の場所指定(X軸とY軸の座標を指定)しても、場所がずれてしまうことが問題になっています。
オリジナル画像の種類(?)によっても少し画像の取得場所が違うような気がします。

引き続き何か情報、手法などがございましたらどうかご教授のほどよろしくお願いいたします。
引用返信 編集キー/
■2447 / inTopicNo.4)  Re[3]: イメージ画像を分割し、分割したイメージをファイル保存する方法
□投稿者/ 中博俊 (1009回)-(2007/04/08(Sun) 21:47:55)
中博俊 さんの Web サイト
とりあえず保存する必要性を感じないんだけど・・・
オンメモリで分割してそれを利用するようにすれば画質劣化どうこうはまったくかんけいないよね?

それと、画質は設定次第で変更できるけど、劣化させないのならBMPにしておかなきゃだめ。

あとはずれるのがどうずれるか見てないけど、座標系の指示間違いじゃないの?
分割した画像をフォトソフトで再合成(手動)して、もともとの画像との違いをあぶりだしてみましょう。
引用返信 編集キー/
■2448 / inTopicNo.5)  Re[4]: イメージ画像を分割し、分割したイメージをファイル保存する方法
□投稿者/ Hongliang (126回)-(2007/04/09(Mon) 01:28:44)
Hongliang さんの Web サイト
解像度(VerticalResolution/HorizontalResolution)かな……。
引用返信 編集キー/
■2480 / inTopicNo.6)  Re[4]: イメージ画像を分割し、分割したイメージをファイル保存する方法
□投稿者/ アルテイシア (3回)-(2007/04/09(Mon) 20:29:13)
ご返信ありがとうございます。
> とりあえず保存する必要性を感じないんだけど・・・
確かに、そんなに必要性はないのですが、現状のアプリの仕様上ファイルからパズルピース読み込みなので…。

> それと、画質は設定次第で変更できるけど、劣化させないのならBMPにしておかなきゃだめ。
そうですね。サイズも考慮した上でJPEGにしたのですが、劣化しますもんね。
サイズも考慮して画質も考えるとPNGとかがいいのかなぁ?と思っています。

> あとはずれるのがどうずれるか見てないけど、座標系の指示間違いじゃないの?
> 分割した画像をフォトソフトで再合成(手動)して、もともとの画像との違いをあぶりだしてみましょう。
座標指定は間違えていないと思います。
同じロジックによって画像分割し、そのオリジナル画像によっては成功しますので。
高画質になればなるほど同じサイズ指定でも、小さくなってしまいます。
解像度が関係しているのかもしれません。
引用返信 編集キー/
■2482 / inTopicNo.7)  Re[5]: イメージ画像を分割し、分割したイメージをファイル保存する方法
□投稿者/ Jitta (295回)-(2007/04/09(Mon) 21:29:56)
Jitta さんの Web サイト
No2480 (アルテイシア さん) に返信
> ご返信ありがとうございます。
>>とりあえず保存する必要性を感じないんだけど・・・
> 確かに、そんなに必要性はないのですが、現状のアプリの仕様上ファイルからパズルピース読み込みなので…。

 だから、保存する必要はないでしょ?メモリ上に持っておくだけでいいんじゃない?


>>あとはずれるのがどうずれるか見てないけど、座標系の指示間違いじゃないの?
>>分割した画像をフォトソフトで再合成(手動)して、もともとの画像との違いをあぶりだしてみましょう。
> 座標指定は間違えていないと思います。
> 同じロジックによって画像分割し、そのオリジナル画像によっては成功しますので。
> 高画質になればなるほど同じサイズ指定でも、小さくなってしまいます。
> 解像度が関係しているのかもしれません。

 解像度にかかわらず 58 ピクセル固定?先に縮小してから分割すれば?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -