tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル同一イメージでのDrawImageが転送されない
記事No6504
投稿日: 2007/11/06(Tue) 23:50
投稿者TK
同一PicyureBox間でDrawImageを行っても表示されません。
同じ呼び出し方法で転送先を別のPictureBoxの場合は転送されます。
どうすれば同一PictureBox内でのイメージ転送ができるか教えてください。

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim g As Graphics
        Dim g2 As Graphics

        With PictureBox2
            .Image = New Bitmap(.Width, .Height)
            g = Graphics.FromImage(.Image)
        End With
        With PictureBox3
            .Image = New Bitmap(.Width, .Height)
            g2 = Graphics.FromImage(.Image)
        End With

        Dim f As New Font("MS Pゴシック", 14)
        g.DrawString("テスト", f, Brushes.Blue, 10, 10)

        Dim rect1 As New Rectangle(0, 0, 100, 100)
        Dim rect2 As New Rectangle(200, 0, 100, 100)
        g.DrawImage(PictureBox2.Image, rect2, rect1, GraphicsUnit.Pixel) '[1]
        g2.DrawImage(PictureBox2.Image, rect2, rect1, GraphicsUnit.Pixel) '[2]

        f.Dispose()
        g.Dispose()
        g2.Dispose()
    End Sub

[1]でPictureBox2の内容を PictureBox2に転送しています。これがうまく行きません。
[2]のPictureBox3へのDrawImageはうまく行きます。

以上です。よろしくお願いします。

[ツリー表示へ]
タイトルRe: 同一イメージでのDrawImageが転送されない
記事No6505
投稿日: 2007/11/07(Wed) 15:33
投稿者y4yama
> 同一PicyureBox間でDrawImageを行っても表示されません。
> 同じ呼び出し方法で転送先を別のPictureBoxの場合は転送されます。
> どうすれば同一PictureBox内でのイメージ転送ができるか教えてください。
>         g.DrawImage(PictureBox2.Image, rect2, rect1, GraphicsUnit.Pixel) '[1]

こんにちは。VB2005で同じ現象でした。Bitmap1を宣言して作っても結局はPictureBox2.Image=Bitmap1 とするのでダメなようで。[1]はgのImageと同じ第一引数Image
では、何もしない?ようです
1.一度、別のBitmap2へ複製を作り、g.DrawImage(Bitmap2, rect2・・・
  だったら、OKでした
2."テスト"というのを小さい Bitmapで作り、g.DrawImageで2箇所貼り付ける、はどうでしょうか

[ツリー表示へ]
タイトルRe^2: 同一イメージでのDrawImageが転送されない
記事No6509
投稿日: 2007/11/07(Wed) 21:23
投稿者TK
> > 同一PicyureBox間でDrawImageを行っても表示されません。
> > 同じ呼び出し方法で転送先を別のPictureBoxの場合は転送されます。
> > どうすれば同一PictureBox内でのイメージ転送ができるか教えてください。
> >         g.DrawImage(PictureBox2.Image, rect2, rect1, GraphicsUnit.Pixel) '[1]
>
> こんにちは。VB2005で同じ現象でした。Bitmap1を宣言して作っても結局はPictureBox2.Image=Bitmap1 とするのでダメなようで。[1]はgのImageと同じ第一引数Image
> では、何もしない?ようです
> 1.一度、別のBitmap2へ複製を作り、g.DrawImage(Bitmap2, rect2・・・
>   だったら、OKでした
> 2."テスト"というのを小さい Bitmapで作り、g.DrawImageで2箇所貼り付ける、はどうでしょうか

[ツリー表示へ]
タイトルRe^2: 同一イメージでのDrawImageが転送されない
記事No6512
投稿日: 2007/11/07(Wed) 21:39
投稿者TK
> こんにちは。VB2005で同じ現象でした。Bitmap1を宣言して作っても結局はPictureBox2.Image=Bitmap1 とするのでダメなようで。[1]はgのImageと同じ第一引数Image
> では、何もしない?ようです
> 1.一度、別のBitmap2へ複製を作り、g.DrawImage(Bitmap2, rect2・・・
>   だったら、OKでした
> 2."テスト"というのを小さい Bitmapで作り、g.DrawImageで2箇所貼り付ける、はどうでしょうか

y4yamaさん、ありがとうございます。
やはり、そうですか!
いろいろ試して、他のサイトも検索したのですが適当なものがなく悩んでいました。
他のPictureBoxを経由して合成できるのは当方でも確認しているのですが
同一PictureBox内でBitBltに代わる機能を実現したいと思っています。
VB6で作ったスクロールテキストを乗せ換えたいと模索しているのですが
以下のような問題があり途方にくれています。
 ・BitMapを作らずにCreateGraphics後にBitBltをすればできるのですが
   他のウィンドウをかぶせると消えてしまう。
 ・DrawStringの描画速度が遅い。 
 ・APIのTextOutで文字を書いた場合、CreateFontIndirectのフォント選択指定がうまく行かない。また、たまに文字が90度回転してしまう。再現性がありません。
   (他の掲示板だったかと記憶していますが、同様の報告があるようです)

.NETは多機能なのですがパフォーマンスがイマイチですね。
.NETでスクロールテキストの例があれば教えていただけると助かります。

 

[ツリー表示へ]
タイトルRe^3: 同一イメージでのDrawImageが転送されない
記事No6515
投稿日: 2007/11/08(Thu) 10:18
投稿者y4yama
> VB6で作ったスクロールテキストを乗せ換えたいと模索しているのですが
> 以下のような問題があり途方にくれています。
>  ・BitMapを作らずにCreateGraphics後にBitBltをすればできるのですが
>    他のウィンドウをかぶせると消えてしまう。
お〜そういうことですか。消えなくて速いテクがありますヨ
> .NETは多機能なのですがパフォーマンスがイマイチですね。
> .NETでスクロールテキストの例があれば教えていただけ驍ニ助かります。

私も先週、取り掛かったことですが、じゃんぬねっとさんの質問掲示板
 http://bbs.wankuma.com/
で質問をいたしまして、コードもあります
スムーズスクロール、について理解を深めたところです
Marshal.Copy がキーになるかと・・・

[ツリー表示へ]
タイトルRe^4: 同一イメージでのDrawImageが転送されない
記事No6523
投稿日: 2007/11/08(Thu) 22:44
投稿者TK
> 私も先週、取り掛かったことですが、じゃんぬねっとさんの質問掲示板
>  http://bbs.wankuma.com/
> で質問をいたしまして、コードもあります
> スムーズスクロール、について理解を深めたところです
> Marshal.Copy がキーになるかと・・・

情報ありがとうございます。
試したところ動きました。
ただ、PictureBoxのInvalidateが重いようでCPU使用率が高いので
もちょっと調べてみようと思います。

[ツリー表示へ]