>えちぜんさん
なるほど、DPIですか。もう少し調べてみます。
いろいろ試した結果上手くいきました。
DrawImageだと画像がスケーリングされてしまうようです。
DrawImageUnscaledAndClippedメソッドでスケーリングさせないように
したところ上手く表示できました。
http://msdn.microsoft.com/ja-jp/library/system.drawing.graphics_members.aspx
>DrawImageUnscaledAndClippedメソッドでスケーリングさせないように
>したところ上手く表示できました。
う~ん。出来たと思ったのにここで問題が・・・。切出し位置が0,0じゃないと
上記のメソッドは上手く行きませんでした・・・。
切出し位置を指定すると描画位置も変わってしまいました(汗)
何か他にうまい方法はないでしょうか?
やりたいことはsample.bmp(3000×3000)があるとしたら左位置(X)と上位置(Y)
を指定しそこから縦(Height)、横(Widh)の指定したピクセルで画像を切抜き(画
像の好きな位置を切抜き出来る)切り抜いた画像をスケーリングせずにオリジナ
ルサイズのまま新規ビットマップに保存したいのです。
現在、問題になっているのは
DrawImageだと上記のことが上手く出来ているが画像がスケーリングされてしま
う。
DrawImageUnscaledAndClippedだとスケーリングせずに表示出来るが左位置(X)と
上位置(Y)の切出し位置を指定するとその位置から描画が開始されてしまう。
※X=0 y=0の左上から切出しを開始すると上手く表示される。
画像とスケーリングに詳しい方、アドバイスお願いします。
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
>えちぜんさん
ありがとうございます。
>g->DrawImage(source, 0, 0, part.Width, part.Height, part,GraphicsUnit::Pixel);
パラメータの順番が異なるようです。
Graphics..::.DrawImage メソッド (Image, Rectangle, Single, Single, Single,
Single, GraphicsUnit)
で試してみましたがやはり0,0の位置からではなく切出し開始位置からビットマップ
に描画されてしまいます。
回答ではないです。
>DrawImageUnscaledAndClipped
ですが、ちゃんと等倍で描画されています?
高さ・幅に合わせて縮小されているような。
http://msdn.microsoft.com/ja-
jp/library/system.drawing.graphics.drawimageunscaledandclipped.aspx
>指定された四角形内に収まるようにイメージをクリップします。
試してみましたが下記のコードでうまくいっているっぽいです。
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;
}
>Blueさん
>bmp->SetResolution
解像度を設定するメソッドがあったのですね!勉強になりました。
Rectangle part(0, 0, 2000, 2000);
として
Graphics..::.DrawImage(source, part,100,100, part->Width,part->Height
,GraphicsUnit::Pixcel)
と書いても上手く表示できました。
Blueさんのコードで生成された画像と比較してみても同じだったのでこれでも
いけると思います。