Bitmapの切出しについて – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] Bitmapの切出しについて

固定ページ 2 / 2

Single Father
 Single Father
(@Single Father)
ゲスト
結合: 16年前
投稿: 14
Topic starter  

>えちぜんさん

なるほど、DPIですか。もう少し調べてみます。


返信引用
Single Father
 Single Father
(@Single Father)
ゲスト
結合: 16年前
投稿: 14
Topic starter  

いろいろ試した結果上手くいきました。

DrawImageだと画像がスケーリングされてしまうようです。

DrawImageUnscaledAndClippedメソッドでスケーリングさせないように
したところ上手く表示できました。

http://msdn.microsoft.com/ja-jp/library/system.drawing.graphics_members.aspx


返信引用
Single Father
 Single Father
(@Single Father)
ゲスト
結合: 16年前
投稿: 14
Topic starter  

>DrawImageUnscaledAndClippedメソッドでスケーリングさせないように
>したところ上手く表示できました。

う~ん。出来たと思ったのにここで問題が・・・。切出し位置が0,0じゃないと
上記のメソッドは上手く行きませんでした・・・。

切出し位置を指定すると描画位置も変わってしまいました(汗)

何か他にうまい方法はないでしょうか?


返信引用
Single Father
 Single Father
(@Single Father)
ゲスト
結合: 16年前
投稿: 14
Topic starter  

やりたいことはsample.bmp(3000×3000)があるとしたら左位置(X)と上位置(Y)
を指定しそこから縦(Height)、横(Widh)の指定したピクセルで画像を切抜き(画
像の好きな位置を切抜き出来る)切り抜いた画像をスケーリングせずにオリジナ
ルサイズのまま新規ビットマップに保存したいのです。

現在、問題になっているのは

DrawImageだと上記のことが上手く出来ているが画像がスケーリングされてしま
う。

DrawImageUnscaledAndClippedだとスケーリングせずに表示出来るが左位置(X)と
上位置(Y)の切出し位置を指定するとその位置から描画が開始されてしまう。
※X=0 y=0の左上から切出しを開始すると上手く表示される。

画像とスケーリングに詳しい方、アドバイスお願いします。


返信引用
えちぜん
 えちぜん
(@えちぜん)
ゲスト
結合: 18年前
投稿: 15
 

DrawImageで描画元の画像も、描画先も、左位置、上位置、縦、横を指定してやればいい
のではないでしょうか。
このとき、縦と横は元も先も同じ値にしておくとか。

g->DrawImage(source, 0, 0, part.Width, part.Height, part, GraphicsUnit::Pixel);

http://msdn.microsoft.com/ja-jp/library/system.drawing.graphics.drawimage
(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/x2s2a44c(VS.80).aspx


返信引用
Single Father
 Single Father
(@Single Father)
ゲスト
結合: 16年前
投稿: 14
Topic starter  

>えちぜんさん

ありがとうございます。

>g->DrawImage(source, 0, 0, part.Width, part.Height, part,GraphicsUnit::Pixel);

パラメータの順番が異なるようです。

Graphics..::.DrawImage メソッド (Image, Rectangle, Single, Single, Single,
Single, GraphicsUnit)

で試してみましたがやはり0,0の位置からではなく切出し開始位置からビットマップ
に描画されてしまいます。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

回答ではないです。

>DrawImageUnscaledAndClipped
ですが、ちゃんと等倍で描画されています?
高さ・幅に合わせて縮小されているような。

http://msdn.microsoft.com/ja-
jp/library/system.drawing.graphics.drawimageunscaledandclipped.aspx
>指定された四角形内に収まるようにイメージをクリップします。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

試してみましたが下記のコードでうまくいっているっぽいです。

Bitmap^ CopyBitmap(Bitmap^ source, Rectangle% part)
{
Bitmap^ bmp = gcnew Bitmap(part.Width, part.Height);
bmp->SetResolution(source->HorizontalResolution, source-
>VerticalResolution);
Graphics^ g = Graphics::FromImage(bmp);
g->DrawImage(source, 0, 0, part, GraphicsUnit::Pixel);

delete g;
return bmp;
}

System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
Bitmap bitmap(LSample.bmp);

Rectangle part(100, 100, 2000, 2000);
Bitmap^ dest = CopyBitmap(%bitmap, part);
dest->Save(Ltest.bmp);
delete dest;
}


返信引用
Single Father
 Single Father
(@Single Father)
ゲスト
結合: 16年前
投稿: 14
Topic starter  

>Blueさん

>bmp->SetResolution

解像度を設定するメソッドがあったのですね!勉強になりました。

Rectangle part(0, 0, 2000, 2000);

として

Graphics..::.DrawImage(source, part,100,100, part->Width,part->Height
,GraphicsUnit::Pixcel)

と書いても上手く表示できました。

Blueさんのコードで生成された画像と比較してみても同じだったのでこれでも
いけると思います。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました