tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル画像の一部を切り取って保存するには?
記事No8390
投稿日: 2008/10/29(Wed) 01:10
投稿者蒼月
いつもお世話になっています。

私は、今、ActiveReportで作成した帳票を、ビットマップに変換する
プログラムを作成しております。
ActiveReportの帳票→TIFF→BitMapという風に変換することはできました。

ですが、ここで一つ問題が発生しています。
確かに、ファイルの変換はできましたが、解像度が違うのです。
(画像が大きすぎる。)

調べた結果、出力されたビットマップファイルから、必要な部分だけを切り出し、
拡大して、保存すれば、うまくいくのではないかと思い、
以下のようなコードを書きましたが、うまく切り出すことができません。


        Dim bmp1 As New Bitmap(Path)
        Dim bmp2 As New Bitmap(2280, 984)
        Dim BmpFilePath As String

        BmpFilePath = Application.StartupPath & "\Print.bmp"

        bmp1.RotateFlip(RotateFlipType.Rotate90FlipX)

        Dim g As Graphics = Graphics.FromImage(bmp2)
        Dim rect As New Rectangle(0, 666, 2280, 984)

        g.DrawImage(bmp1, rect, 0, 0, 2280, 984, GraphicsUnit.Pixel)

        bmp2.RotateFlip(RotateFlipType.Rotate90FlipX)
        bmp2.Save(BmpFilePath, System.Drawing.Imaging.ImageFormat.Bmp)

        'オブジェクトを破棄
        g.Dispose()
        bmp1.Dispose()
        bmp2.Dispose()

bmp2.Saveで保存した画像を見ると、2280×984のうちの4分の1くらいに切り取られた画像が表示され、残りは真っ黒になってしまいます。
これを2280×984で保存したいのですが、どのように修正すればいいのでしょうか?

どうすればよいのか、助言を頂ければと思います。

[ツリー表示へ]
タイトルRe: 画像の一部を切り取って保存するには?
記事No8391
投稿日: 2008/10/29(Wed) 09:05
投稿者花ちゃん
> bmp2.Saveで保存した画像を見ると、2280×984のうちの4分の1くらいに
>切り取られた画像が表示され、残りは真っ黒になってしまいます。

貴方がそのように切り取り範囲を指定されているからでは、ないでしょうか?
書かれたコードをよく見直して見て下さい。

解らないようなら、座標を指定している所を順番に変更して試して見れば
解るかと思いますよ。(そこまでするまでもないかと。)

下記でも同様の事をしておりますので参考にして下さい。
http://hanatyan.sakura.ne.jp/dotnet/zu06.htm

# 下記で質問されている方と同じ方ではないですかね。984×2280ピクセル を扱う
 人がそうはいないように思うのですが。
http://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+200810/08100025.txt
http://hpcgi1.nifty.com/MADIA/vbnet/wwwlng.cgi?print+200810/08100021.txt

10/30  7:12
  この投稿を何度かご覧になっているようですが、解決されたのでしょうか?

[ツリー表示へ]
タイトルRe^2: 画像の一部を切り取って保存するには?
記事No8405
投稿日: 2008/10/31(Fri) 23:20
投稿者蒼月
花ちゃんさん

遅くなってしまい、申し訳ありません。
解決しました。

Rectangleで指定する座標とDrawImageで指定する座標の認識を
逆に理解していたのが原因でした。

Rectangleに指定していた座標をDrawImageに、
DrawImageに指定していた座標をRectangleに入れ替えることで、
うまく実行することができました。

最終的にはモノクロビットマップとして保存する必要があったため、
下記のようになりました。

'保存した帳票を読込む
Dim bmp1 As New Bitmap(Path)
Dim BmpFilePath As String = Application.StartupPath& "\Print.bmp"

'必要部分のみを切り取る
Dim rect1 As New Rectangle(0, 650, 2280, 984)
Dim bmp2 As Bitmap = bmp1.Clone(rect1,PixelFormat.Format1bppIndexed)

'保存
bmp2.Save(BmpFilePath,ystem.Drawing.Imaging.ImageFormat.Bmp)

'破棄
bmp1.Dispose()
bmp2.Dispose()


># 下記で質問されている方と同じ方ではないですかね。984×2280ピクセル を扱う
> 人がそうはいないように思うのですが。
はい。
それは両方とも私が投稿したものです。

不快な思いをさせてしまったのでしたら、申し訳ありませんでした。

[ツリー表示へ]