GraphicsクラスとAPIの関係???
- GraphicsクラスとAPIの関係について簡潔に説明します。
- Graphicsクラスは公開されているAPI描画関数を組合わせて使用しています。
- Graphicsクラスは一般のAPIを使用せず独自の機能で描画しています。
- ベストアンサー
GraphicsクラスとAPIの関係???
プリンタに線を描くのに (1)APIのLineTo関数 (2)GraphicsのDrawLineメソッド の何れかを使用しております これに関連して常々疑問に思っていることは、LineTo関数とDrawLineメソッドの関係です 描画初心者の駆出しである私としては『DrawLineメソッドは結局の所、APIのLineTo関数を呼出して線を描いている』と思っておりますが間違えでしょうか? 質問を更に簡潔に表現するならばGraphicsクラスは公開されているAPI描画関数を組合わせて使用することにより出来上がっているか? との質問です それともGraphicsクラスは一般のAPIを使用せず独自の機能で描画しているのでしょうか? ご存知したら教えてください、また関連資料等がありましたらお願い致します
- sato-may
- お礼率99% (474/477)
- CGI
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Graphicsクラスは、WindowsのGDI+ライブラリを使用しているはずです。描画しているのが唯の直線の場合は、最終的にLineToを呼び出していると思います。 GDI+はペンをリッチにしたり出来るので、その場合はGDI+内部で自力で描画(線・点・塗りつぶしなどを駆使して)している可能性があります。 ILSpyを使って、GDI+の呼び出し部分までは自力で調べることが出来るかもしれません。それ以上は難しいでしょう。又は、API呼び出しを解析するツールなどを使用すれば分かると思います。
関連するQ&A
- Graphics等のイメージの描画
こんばんわ。 GraphicsクラスのdrawImageメソッドをつかっているですが 描画したあとでイメージだけを消す方法はあるのでしょうか。 APIはみてみましたがGraphicsクラスにはないようでした。 消すとしたら画面全体を消すのしかわからなく、使い勝手が悪いので困ってます。 ちなみにauのオープンアプリを作ろうとしているのでCLDCで使えるのを教えてください。 よろしくお願いします。
- ベストアンサー
- Java
- C#のGraphicsクラスについて(GDI+)
以下のようにgraphicsクラスをつかった画像の描画をおこないました。 Graphics gr = Graphics.FromImage(mapObj); というふうにからのリソースからGraphicsオブジェクトをつくる方法です。 using System; using System.IO; using System.Windows.Forms; using System.Drawing; using System.Web; using System.Net; using System.Text; using System.Threading; using System.ComponentModel; public class MainClass{ public static void Main(string [] args){ NewForm formObj = new NewForm(); formObj.RenderMethod(); Application .Run(formObj); } } public class NewForm : Form{ public NewForm(){ this.Width = 500; this.Height = 500; } public void RenderMethod(){ Bitmap mapObj = new Bitmap(500,500); Graphics gr = Graphics.FromImage(mapObj); Image imageObj = Image.FromFile("C:\\test.jpg"); gr .DrawImage(imageObj, 0,0,150,150); this.BackgroundImage = mapObj; } } このほかに、フォームコントロールの thisl.CreateGraphics()という メソッドを使っても画像を描画できるとききました。 あるサンプルをみると public class NewForm : Form{ public NewForm(){ this.Width = 500; this.Height = 500; } public void RenderMethod(){ Graphics gr = this.CreateGraphics(); Image imageObj = Image.FromFile("C:\\test.jpg"); gr .DrawImage(imageObj, 0,0,150,150); } } とこのようにthis.CreateGraphics()をつかっていましたが 実際にはこれが描画されないのです。 Graphics gr = Graphics.FromImage(mapObj); というGraphicsクラスの静的メソッドを使う方法ではなく コントロールのCreateGraphicsメソッドをつかって描画するにはどうしたらよいのですか? 識者のかた、ご教授ください。
- ベストアンサー
- C・C++・C#
- APIの非奨励クラス?
失礼致します。 質問させてください。 今、java.util.regex.PatternをインポートしてPattern下のquoteメソッドを使ったところ「java.lang.NoSuchMethodError: java.util.regex.Pattern.quote(Ljava/lang/String;)Ljava/lang/String;」 というエラーが出ました。 ローカルではこのメソッドを使い、問題なく動いているにもかかわらずです。PatternクラスはAPIに掲載されているのですがquoteはありませんでした。このメソッドは削除されたのでしょうか?誰かご存知の方、教えて頂けますでしょうか?
- ベストアンサー
- Java
- クラス・メソッド・プロパティについて
質問の閲覧ありがとうございます、是非回答お願い致します。 前々からプロミングに興味があったのですが、敷居が高そうという勝手な思い込みから、手を出せずにいましたが 先週ごろからVB.netの方を少しずつではありますが勉強し始めました。 色々なサイトを参考に実際キーボードを叩きながら四苦八苦している最中なのですが、クラス(インスタンシング)・メソッド・プロパティで壁にぶち当たりました TextBox1.AppendText("Hello!!") PictureBox1.Image = Image.FromFile(File1) 上記のコードでいう「AppendText」はメソッド「Image」はプロパティ だと思うのですが、 1:クラス名(orインスタンス)+メソッド 2:何らかの値+メソッド 3:特殊なパターン(MsgBoxなど) これは上記のどのパターンにあてはまるのでしょうか (TextBoxやPictureBoxはクラスとして扱われる・・・?) また、インスタンス化しないと使用できないもの、またその逆の判別が中々付きません 共有・非共有メンバと書かれていたりするのですが、明確な意味がわからず頭を悩ませています 例として、 Graphicsのdrawlineを使用する時にはインスタンス化しなくても描画が可能であるのに、乱数を範囲指定で出したい時にはインスタンス化が必要 など、どちらも値を指定して・・・という内容なのに・・と思ってしまいます 文がわかりにくく、質問の内容も幼稚で申し訳ありませんが、 馴染みのない私にとっては難関なので是非とも 質問内容も含め、クラス(インスタンス)、メソッド、プロパティについてご教授ください、よろしくお願い致します
- 締切済み
- Visual Basic
- Graphicsについて
Graphicsで描かれた線や図形は、ダブルバッファリングを使用しないと、ウィンドウのサイズを変更したり、別のウィンドウで覆ったりすると、描かれたものは消えてしまいます。 そこで今回JPanelを用いて、消えてしまわないようにしたいですが、 JPanel p = new JPanel(); Graphics g = p.getGraphics(); g.drawLine( x, x, y, y); のようにして、を実行すると上記の行為をすると消えてしまいます。JPanelはデフォルトでダブルバッファリングを備えているはずですよね。なぜなのでしょうか? どなたかご教授願います。宜しくお願いします。
- ベストアンサー
- Java
- Graphics型からのピクセル操作(C#)
C#についての質問です。 Graphicsでピクチャーボックスに線を描画した後に、ピクチャーボックスのピクセル操作をしたいのですが、どうすればよいのか分かりません。 一度GraphicsからBitmapに変換しないといけないと思うのですが、どうすればよいのでしょうか??
- ベストアンサー
- その他(プログラミング・開発)
- DrawLineで引いた線が消えてしまいます。
お伺いしたい事があります visual basic 2005 なのですが、 picture box にdrawlineで線を引き、他のフォームが前面に来て、 ドラッグするとラインが消えてしまいます .Invalidated、 .over等を試したのですが、うまくいきませんでした。 再描画するタイミングを取得する方法としてどの様な方法があるのでしょうか? それとも、 Dim canvs As Graphics = pbox.CreateGraphics() canvs.DrawLine( 以外で描画するのでしょうか? 申し訳ありません宜しくお願いします。
- ベストアンサー
- Visual Basic
- SwingのpaintComponent()メソッドについて
JAVA初心者です、宜しくお願いします。 参考書で、Swingについて以下のようなコメントを見つけました、ただ何故そうなのかの理由を書いていません。 以下の内容はどのような理由からそうなるのでしょうか。 「Swing コンポーネントでは、メソッドpaintは推奨されていません。 paintComponentをプログラムから呼び出してはいけません。描画をしたい場合は、 paintComponent をオーバー ライドしたクラスの repaint() メソッドを呼び出します。 Swing コンポーネント上に描画するには、 描画したいコンポーネントのクラスを継承したクラスで、 メソッド paintComponent(Graphics g) をオーバーライドし、 パラメータで渡された g に対して Graphics クラスのメソッドで描画をします。 オーバーライドした paintComponent の先頭で、このコンポーネントの土台を描画するために、 super.paintComponent(g) を呼び出しておきます。」 宜しくお願いします。
- ベストアンサー
- Java
- javaの描画関係のプログラムの考え方について
昔からあるJavaの基本的なグラフィックスのプログラム(下方のサンプル)の構造の基本についてお尋ねします。 プログラムの構成を言葉で言うなら、 1 クラスの設定 2 クラス内部のメソッドの作成(コンストラクタ、paint, main) (mainはメソッドとは言わないかもしれませんが、クラスの中の実働部隊のトップということでそういう位置づけにしました。) ここで疑問ですが、 疑問1 paintメソッドですが、どのようにして呼ばれていると考えるのでしょうか。プログラムの中で呼び出されていないように見えます。 mainの中のw.setVisible(true)とかw.show()が描画せよ、というトリガーだと思いますが、paintを動かせとはストレートには読めません。 w.paint() とかだとTestクラスのオブジェクトwのメソッドpaintを動かしているということが示されるわけですが。こういうのがないですね。 疑問2 mainの中のFrame w=new Test()はTest w=new Test()でも動作しますが、これはあまり気にしなくていいでしょうか。 ---- 以下はプログラムの構造です。--- import 適当に public class Test extends Frame{ public Test(){ クラスと同じ名前なのでコンストラクタですね。 setSize(300,300);ウィンドウのサイズ指定 addWindowListener() などいろいろウィンドウのセッティング ウィンドウの閉じ方とか 描画のためのキャンバスの用意 } public void paint(Graphics g){ g.drawLine(0,0,200,200); 描画本体 この部分をいろいろプログラミングする } public static void main(String[] args){ メインなのでここがスタートライン Frame w=new Test(); オブジェクトを作って // w.show(); w.setVisible(true); 描け } }
- 締切済み
- Java
- PictureBoxの描画について
VB2005を使用してPictureBoxに線を描きました。 Dim g As Graphics = PictureBox1.CreateGraphics() g.DrawLine(p, X1, Y1, X2, Y2) 線は上手く描けたのですが、表示している画面(Form)を最小化して再度最大化すると、描いた線が消えてしまいます。FormをHideしてもう一度Showしても同じです。 この描画を消さないようにするには、どうすればよいでしょうか?
- ベストアンサー
- Visual Basic
お礼
ありがとうございます 助かりました 今後も宜しくお願い申し上げます ありがとうございました