tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルピクチャーボックスの背景に書かれた線や文字をJPGに
記事No5694
投稿日: 2007/06/24(Sun) 23:19
投稿者トッチー
XPProのVB.NET2003です。
フォームにピクチャーボックス一つとボタンが3つあります。



Public Class Form1
    Inherits System.Windows.Forms.Form
    Dim len As Integer = 15
    Dim myPen As New Pen(Color.Black)


  (中略)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim gPStyle As Graphics = PictureBox1.CreateGraphics()
        Dim gForm As Graphics = Me.CreateGraphics()
        gPStyle.DrawRectangle(myPen, 70, 10, len, len)    '四角描画
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        PictureBox1.Image.Save("T:\abc.jpg", Imaging.ImageFormat.Jpeg) 'ここでエラー
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        End
    End Sub

ボタン1で、四角形を書きます。
ボタン2で、ピクチャーボックスの背景に書かれた罫線と文字(このソースでは文字がありませんが)をJPGファイルに落とし込みたいのですが、 もちろんT:\abc.jpgはない状態でかつ、Tドライブはあるのにもかかわらず、
「'System.NullReferenceException' のハンドルされていない例外が JPGLINE.exe で発生しました。

追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
」が表示され、エラーとなります。

ちなみにピクチャーボックスには、普通の画像ファイルを読み込まないことを前提とします。
罫線等のグラフィックをJPG化するにはどう直したらよいでしょうか?

[ツリー表示へ]
タイトルRe: ピクチャーボックスの背景に書かれた線や文字をJPGに
記事No5697
投稿日: 2007/06/25(Mon) 02:26
投稿者魔界の仮面弁士
ファイルアクセスするのなら、Try ステートメントでエラーに備える必要がありますね。

> オブジェクト参照がオブジェクト インスタンスに設定されていません。
文字通り、画像オブジェクトが無い事が原因なので、
 Dim img As Image = PictureBox1.Image
 If Not img Is Nothing Then
  img.Save("T:\abc.jpg", Imaging.ImageFormat.Jpeg)
 End If
のように、画像が割り当て済みの時のみ保存すれば、エラーは回避できるかと。

>         Dim gPStyle As Graphics = PictureBox1.CreateGraphics()
>         Dim gForm As Graphics = Me.CreateGraphics()
>         gPStyle.DrawRectangle(myPen, 70, 10, len, len)    '四角描画
プロパティやイベント引数で得た Graphics とは異なり、CreateGraphics メソッドで
自ら「生成」した Graphics は、自分で Dispose しなければなりません。
myPen も然り。

>        End
End ではなく、Me.Close() あたりが適当かと。


で、そもそも画像の作成が目的であれば、画面に描画する必要は無く、
Bitmap クラスに描画するだけで良いかも。

[ツリー表示へ]
タイトルRe^2: ピクチャーボックスの背景に書かれた線や文字をJPGに
記事No5699
投稿日: 2007/06/25(Mon) 07:49
投稿者トッチー
夜遅くありがとうございました。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim gPStyle As Graphics = PictureBox1.CreateGraphics()
        Dim gForm As Graphics = Me.CreateGraphics()
        gPStyle.DrawRectangle(myPen, 70, 10, len, len)    '四角描画
        gPStyle.Dispose()
        myPen.Dispose()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim img As Image = PictureBox1.Image
        If Not img Is Nothing Then
            img.Save("T:\abc.jpg", Imaging.ImageFormat.Jpeg)
        Else
            MsgBox("割り当てられていません")
        End If

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Me.Close()
    End Sub

に変えました。

しかしながら、ボタン2を押したとき、画像が割り当てられていないので、当然メッセージが出ます。

一番最初の質問の仕方が悪かったかもしれませんが、
画像はむしろ割り当てられていません。
純粋にピクチャーボックスの背景に書かれた図形や文字(このソースの中には無いが)をJPGにしたいと考えています。

この目的を満たせば、他の方法でもかまいません。

引き続き自分でもがんばってみます。
ご回答ありがとうございました。

[ツリー表示へ]
タイトルRe^3: ピクチャーボックスの背景に書かれた線や文字をJPGに
記事No5700
投稿日: 2007/06/25(Mon) 07:53
投稿者花ちゃん
> この目的を満たせば、他の方法でもかまいません。

ここに掲載している Tips ではだめだったのでしょうか?
(PictureBoxに文字を描画してファイルに保存(画像を加工して保存))

[ツリー表示へ]
タイトルRe^4: ピクチャーボックスの背景に書かれた線や文字をJPGに
記事No5701
投稿日: 2007/06/25(Mon) 08:24
投稿者トッチー
毎度お世話になっております。
試していません。
一度、やってみますね。

[ツリー表示へ]
タイトル加工してみます
記事No5702
投稿日: 2007/06/25(Mon) 08:36
投稿者トッチー
> > この目的を満たせば、他の方法でもかまいません。
>
> ここに掲載している Tips ではだめだったのでしょうか?
> (PictureBoxに文字を描画してファイルに保存(画像を加工して保存))

考えと同じことができました。
これからもうちょっと加工します。


調査不足でしたごめんなさい。
まことにありがとうございました。

[ツリー表示へ]