VisualBasic2008のGraphicsでのエラー

このQ&Aのポイント
  • VisualBasic2008でGraphics描画を勉強中ですが、g.FillEllipse()の行でエラーが発生します。
  • エラーメッセージは『使用されたパラメータが有効ではありません。』です。
  • 修正箇所が分からず苦しんでいます。ご教示いただけないでしょうか。
回答を見る
  • ベストアンサー

VisualBasic2008で、Graphicsについての質問です。

VisualBasic2008で、Graphicsについての質問です。 私は今、Graphics描画の勉強をしているのですが、下のコードを書くと『使用されたパラメータが有効ではありません。』というエラーが出ます。 エラー行は、g.FillEllipse()の行なのですが、修正箇所が解らず苦しんでいます。 どなたか教えてください。よろしくお願いします。 Dim MyBrush As Brush = New Drawing2D.LinearGradientBrush(New Rectangle(5, 5, 120, 60), Color.Yellow, Color.Black, 40) g.FillEllipse(MyBrush, New Rectangle(5, 5, 120, 60))

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

先ほどの回答に追記しておきます。 別にForm_Paintでなくともよいです。 要は「g」という定義が正しく定義されていればエラーもでないかと。 どこに描画するのか指定しなさいって事なんでしょうかね。 FormにButtonを1つ貼り付けました。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim MyBrush As Brush = New Drawing2D.LinearGradientBrush(New Rectangle(5, 5, 120, 60), Color.Yellow, Color.Black, 40) Dim g As System.Drawing.Graphics = Me.CreateGraphics g.FillEllipse(MyBrush, New Rectangle(5, 5, 120, 60)) End Sub

hatopo7979
質問者

補足

>どこに描画するのか指定しなさいって事なんでしょうかね。 そういうエラーでしたか。 >「g.FillEllipse」の「g」はどっから持ってきました? すみません、さっきのコードとは別の場所にかいてあったので抜けてしまいました。 改めて全コードを書くとこうなります。 このコードだとなぜ上手くいかないのでしょうか? Dim g As Graphics PictureBox1.Image = New Bitmap(Me.PictureBox1.Size.Width, Me.PictureBox1.Height) g = Graphics.FromImage(PictureBox1.Image) Dim MyBrush As Brush = New Drawing2D.LinearGradientBrush(New Rectangle(5, 5, 120, 60), Color.Yellow, Color.Black, 40) g.FillEllipse(MyBrush, New Rectangle(5, 5, 120, 60))

その他の回答 (2)

回答No.3

「g」を定義していて「FromImage」で指定してるんですね。 そうなると前述した意味のエラーではないのかも・・・ FormにButtonとPictireBoxを配置してButton_Clickイベントに 提示してもらったソースを記述したところエラーなんて出ませんでしたよ?

回答No.1

こんちわ。 「g.FillEllipse」の「g」はどっから持ってきました? それと何かのイベントに記述しているんだと思いますがどのイベントに記述してますか? 試してみましたが↓ Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint Dim MyBrush As Brush = New Drawing2D.LinearGradientBrush(New Rectangle(5, 5, 120, 60), Color.Yellow, Color.Black, 40) e.Graphics.FillEllipse(MyBrush, New Rectangle(5, 5, 120, 60)) End Sub 上記のイベントでは「g」を「e.Graphics」とする事で動作確認できましたよ。

関連するQ&A

  • フォームに描画して表示をスクロールしたい

    非.NETユーザーだったのですが、.NETを勉強しています。 フォーム上に描画を行いたいのですが、下のモジュールを入力して、 実行した場合○と□が描画されます。 しかし、フォームの大きさ以上の描画をした場合に、表示しきれないので スクロールバーを表示したいと思っています。 HScrollBarをフォームに貼り付けてBottomに移動した後、 実行した所、描画は行われるのですがスクロールバーが効きません。 なんらかのプロパティを変更しなければならないのでしょうか。 それとも、この場合根本的にHScrollBarコントロールを使用できないの でしょうか。 Private Sub cmd描画_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmd描画.Click Dim g As Graphics Dim p As Pen Dim b As SolidBrush Dim r1, r2, r3 As Rectangle g = Me.CreateGraphics p = New Pen(Color.Red) b = New SolidBrush(Color.Blue) r1 = New Rectangle(10, 10, 50, 50) g.DrawEllipse(p, r1) r2 = New Rectangle(70, 70, 50, 50) g.FillRectangle(b, r2) r3 = New Rectangle(500, 10, 50, 50) g.DrawEllipse(p, r3) End Sub よろしくお願い申し上げます。

  • グラフィックスの読み取りについて。

    Option Strict On 'VisualBasic2008(無料版) Imports System.Drawing.Drawing2D Public Class Form1 Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint Dim myFont As New Font("Arial", 20, FontStyle.Bold) e.Graphics.DrawString("7", myFont, Brushes.Red, 0, 0) End Sub End Class 例えば、こんな感じのプログラムがあるとします。 PictureBox1のサイズは25*25です。 PictureBox1内のグラフィックスの読み取りがしたいのです。 質問__1 ドット単位で625のデータをARGBで読み取り配列に格納したいです。 質問__2 グラフィックスが表示されてる場合は1を代入、表示されてない場合は0を代入、配列に入れたいです。イチゼロデータを作りたいです。 よろしくお願いします。

  • Graphicsプロパティ

    例えば using System; using System.Drawing; using System.Windows.Forms; class SeparateMain { public static void Main() { Application.Run(new AnotherHelloWorld()); } } class AnotherHelloWorld : Form { public AnotherHelloWorld() { Text = "Another Hello World"; BackColor = Color.White; } protected override void OnPaint(PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.DrawString("Hello, windows Forms!", Font, Brushes.Black, 0, 0); } } の中の Graphics grfx = pea.Graphics; という部分なのですが、この部分はなぜ必要で、何をしてるのでしょう。 GDI+というのでしょうか System.Drawing.Graphicsというクラスのインスタンス、grfxを定義して、 PaintEventArgsのインスタンスpeaのGraphicsプロパティを代入 この処理が必要な理由がわかりません。お願いします。

  • 色の変更

    また分からないことが出来ましたので、よろしくお願いいたします。 今、openFileDialogで画像を読取、その画像の黒色を白色に変更してpicutreBoxに表示するプログラムを作成しています。 [C#] Bitmap img = new Bitmap(openFileDialog.FileName); Graphics g = Graphics.FromImage(img); System.Drawing.Imaging.ColorMap[] cms = new System.Drawing.Imaging.ColorMap[] {new System.Drawing.Imaging.ColorMap(), new System.Drawing.Imaging.ColorMap()}; cms[0].OldColor = Color.Black; cms[0].NewColor = Color.White; System.Drawing.Imaging.ImageAttributes ia = new System.Drawing.Imaging.ImageAttributes(); ia.SetRemapTable(cms); g.DrawImage(img, new Rectangle(img.Width + 10, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel,ia); g.Dispose(); PictureBox1.Image = img; という風に作成したのですが、色が変更されませんでした。 どこが違うのか分かられる方がいらっしゃいましたら、よろしくお願いいたします。

  • PBoxのGraphicsをImageに書き込む

    お世話になります PictureBoxを2枚使用して以下の様に現状はなっております。 PictureBox AAは背景となる画像を描画 AA->Image = bmpGazou; PictureBox BBはAAのオーバーレイとして、文字や図形をGraphicsオブジェクトに描画したり編集したりしています。 主にg->FillEllipse等で円を描画しています ※文字や図形以外は透過 やりたいこと 保存用のBMPを作成して、そこにAAとBBを書き込んで、Jpeg保存したい 保存用BMPを定義して Bitmap^ bmp = gcnew Bitmap(ixSize, iySize); Graphics^ g = Graphics::FromImage(bmp); そこにAAを書き込む g->DrawImage(AA->Image,・・・ ここまでは正常にできたのですが、 BBのImageプロパティが未定義なので、g->DrawImageではBBを書き込めませんでした。 GraphicsオブジェクトをBMPに上書き(重ね書き)したいのですが、 どの様にすればよいのか教えていただけないでしょうか。 ↓等も見てはいるのですが、前提条件のBBの使い方が違うので、やり方が判りませんでした。 http://dobon.net/vb/dotnet/graphics/pictureboximageanddrawimage.html ※PCの画面上はAAの上にBBが表示され、背景のAA画像に文字や図形を重ねて描画できております。

  • javaでgraphicsの描画の件

    今日は javaでgraphicsの描画を行っていますが、CENTERのペインには、描画できますが、 それ以外のペイン(NORTH,WEST、EAST,、SOUTH)には、描画できないように思います。 Q1)この件について、コメント頂けますと大変助かります。 下記に、ソースコードを添付いたします。 =================== package pkg; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import javax.swing.JFrame; import javax.swing.JPanel; public class SampleApp extends JFrame { public SampleApp(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(600, 300); this.add(new GPanel(), BorderLayout.WEST); this.add(new GPanel(), BorderLayout.CENTER); } public static void main(String[] args) { new SampleApp().setVisible(true); } } class GPanel extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); // int w = this.getWidth(); // int h = this.getHeight(); int w=200; int h=200; g.setColor(Color.RED); g.fillOval(0, 0, w/2, h/2); Graphics2D g2 = (Graphics2D)g; g2.draw(new Line2D.Double(40, 40, w,h)); g.setColor(Color.BLUE); g.setFont(new Font("Serif", Font.BOLD, 36)); g.drawString("Graphics draw!", 10, h - 50); // g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(8.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); } }

    • ベストアンサー
    • Java
  • C#で派生クラスから描画処理を行う

    C#を勉強しているのですが、GUIを作り初めて描画処理で分からない所があり、質問させて頂きます。 基本クラスの方で「Hello, world!」という文字列をDrawStringで表示させる事は出来たのですが、それを基本クラスを継承した派生クラスのメソッドで行うと何も表示されないんです。 以下が試したコードです。 //基本クラスSample1 using System; using System.Drawing; using System.Windows.Forms; public class Sample1 : Form {   protected Bitmap image; protected Graphics g; protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Sample2 s = new Sample2(); s.helloworld(); e.Graphics.DrawImage(image, 0, 0); } public Sample1() { SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); image = new Bitmap(600, 400); g = Graphics.FromImage(image); } static void Main() { Form form = new Sample1(); form.Text = "sample"; form.ClientSize = new Size(600, 400); form.BackColor = Color.FromArgb(0xff, 0xff, 0xff); Application.Run(form); } } //派生クラスSample2 using System; using System.Drawing; using System.Windows.Forms; public class Sample2 : Sample1 { Brush brush = new SolidBrush(Color.Black); public void helloworld() { g.DrawString("Hello, world!", this.Font, brush, 10, 10); } } なぜ表示されないのか分かる方いらしたら、ご教授願えないでしょうか。是非お願いします。

  • javaのsetColor、setBackgroundについて

    プログラミング初心者で、困っています。教えてください。Javaで g.setColor(Color.red); というサンプルに良くあるコードをコンパイルしてもエラーになってしまいます。 import java.applet.Applet; import java.awt.Graphics; public class First2 extends Applet{ public void init() { setBackground(Color.yellow); } } をコンパイルすると C:\myJ\test1>javac First2.java .\Color.java:7: ')' がありません。 g.setColor(Color red); ^ First2.java:6: シンボルを見つけられません。 シンボル: 変数 yellow 場所 : Color の クラス setBackground(Color.yellow); ^ .\Color.java:6: java.awt.Graphics は abstract です。インスタンスを生成することは できません。 Graphics g = new Graphics(); ^ .\Color.java:7: シンボルを見つけられません。 シンボル: 変数 Color 場所 : Color の クラス g.setColor(Color red); ^ エラー 4 個 となってしまうんです。 ネット上のいろんなサイトでは問題なく動作するように 書かれていますが、なぜエラーになるんでしょう? どうしたら解決できますか?ご指南下さい。 ちなみにjavaのversion は 1.6 です。

    • ベストアンサー
    • Java
  • For ~ Next の中での Dim宣言について

    四角形を下方向にずらしながら繰り返し描きたい場合、 以下のソースのようにFor ~ Next の中での Dim宣言を 行うのは一般的でしょうか。 他にスマートな記述があれば教えてください。 よろしくお願いします。 --------------------------------------- '四角形を下方向にずらしながら描画 For i = 0 To 10   Dim rect As New Rectangle(x, y* i , w, h)   g.DrawRectangle(Pen.Black, rect) Next

  • 動的に画像を作成し保存するには?

    Visual Basic 2012を使用しています。 下記プログラムを実行するとエラーが表示されてしまいます。 Dim img As New Bitmap(200, 100) Dim g As Graphics = Graphics.FromImage(img) g.FillRectangle(Brushes.Black, g.VisibleClipBounds) g.Dispose() PictureBox1.Image = img img.Save("E:\EPUB_test\test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) img.Dispose() 表示されるエラーは下記です。 型 'System.ArgumentException' のハンドルされていない例外が System.Drawing.dll で発生しました どこが間違っているのでしょうか? 正しく動作させるにはどこを修正すべきかをお教え下さい。

専門家に質問してみよう