C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 1ドットの点を書きたい


(過去ログ 59 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■33526 / inTopicNo.1)  1ドットの点を書きたい
  
□投稿者/ ken (46回)-(2009/03/03(Tue) 13:40:42)

分類:[VB.NET/VB2005 以降] 

こんにちは

VB2003+WinXP SP2で開発しています。
以下のコードで、1ドットの点を書こうとしたのですが
でき上ったファイルをMSPAINTで見ると、2×2の黒い点が描画されてしまいます。

g.DrawRectangle(p, x, y, 1, 1) を g.DrawLine(p, x, y, x, y)に変えてみたら
何も描画されてませんでした。

Dim bmp As New Bitmap(32, 32)
Dim g As Graphics = Graphics.FromImage(bmp)
g.Clear(Color.White)
Dim penB As New Pen(Color.Black, 1)
Dim x As Integer=0
Dim y As Integer=0

g.DrawRectangle(p, x, y, 1, 1)
bmp.Save("hoge.bmp", System.Drawing.Imaging.ImageFormat.Bmp)

どうすれば、1ドットの点が描けるのでしょうか?
何か設定が足りませんか?
よろしくお願い致します。

引用返信 編集キー/
■33527 / inTopicNo.2)  Re[1]: 1ドットの点を書きたい
□投稿者/ Hongliang (342回)-(2009/03/03(Tue) 14:03:10)
FillRectangle かな
引用返信 編集キー/
■33528 / inTopicNo.3)  Re[1]: 1ドットの点を書きたい
□投稿者/ επιστημη (1792回)-(2009/03/03(Tue) 14:10:36)
επιστημη さんの Web サイト
> Dim bmp As New Bitmap(32, 32)

BitmapにSetPixelってメソッドなかったっけか?

引用返信 編集キー/
■33534 / inTopicNo.4)  Re[1]: 1ドットの点を書きたい
□投稿者/ 隆 (1回)-(2009/03/03(Tue) 14:33:48)
No33526 (ken さん) に返信
> こんにちは
> 
> VB2003+WinXP SP2で開発しています。
> 以下のコードで、1ドットの点を書こうとしたのですが
> でき上ったファイルをMSPAINTで見ると、2×2の黒い点が描画されてしまいます。
> 
> g.DrawRectangle(p, x, y, 1, 1) を g.DrawLine(p, x, y, x, y)に変えてみたら
> 何も描画されてませんでした。
> 
> Dim bmp As New Bitmap(32, 32)
> Dim g As Graphics = Graphics.FromImage(bmp)
> g.Clear(Color.White)
> Dim penB As New Pen(Color.Black, 1)
> Dim x As Integer=0
> Dim y As Integer=0
> 
> g.DrawRectangle(p, x, y, 1, 1)
> bmp.Save("hoge.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
> 
> どうすれば、1ドットの点が描けるのでしょうか?
> 何か設定が足りませんか?
> よろしくお願い致します。
> 

  Dim x As Double, mag As Double
        Dim px As Long, py As Long
        Dim myPen2 As New Pen(Color.Red, 1)

        mag = 100
        For x = -2 To 2 Step 0.1
            px = mag * x
            py = mag * (x * x * x - x)
            e.Graphics.DrawRectangle(myPen2, px, py, 1, 1)
        Next
参考にしてください

引用返信 編集キー/
■33539 / inTopicNo.5)  Re[2]: 1ドットの点を書きたい
□投稿者/ ken (48回)-(2009/03/03(Tue) 15:49:13)
今回は、επιστημη さんのBitmapのSetPixelメソッドで実現できました。

そのほかの方法も勉強のため試してみたいと思います。

みなさん、ありがとうございます。

解決済み
引用返信 編集キー/
■33540 / inTopicNo.6)  Re[1]: 1ドットの点を書きたい
□投稿者/ よねKEN (281回)-(2009/03/03(Tue) 16:24:17)
既に解決済みとのことですが、以下のようにする方法もありますね。

No33526 (ken さん) に返信
> g.DrawLine(p, x, y, x, y)に変えてみたら何も描画されてませんでした。

g.DrawLine(p, x, y, x + 0.1F, y)

解決済み
引用返信 編集キー/
■33544 / inTopicNo.7)  Re[2]: 1ドットの点を書きたい
□投稿者/ Jitta (576回)-(2009/03/03(Tue) 17:44:12)
No33540 (よねKEN さん) に返信
> 既に解決済みとのことですが、以下のようにする方法もありますね。
>
> ■No33526 (ken さん) に返信
>>g.DrawLine(p, x, y, x, y)に変えてみたら何も描画されてませんでした。
>
> g.DrawLine(p, x, y, x + 0.1F, y)
>

Graphics.PageUnit だと思います。
> この Graphics のページ座標で使用する長さの単位を取得または設定します。

これが GraphicsUnit.Inch に設定されていると、DrawLine などで設定する値は 1インチ を単位にします。
デフォルトが何になっているか忘れましたが、 GraphicsUnit.Pixel にすると、1ピクセル 単位で値を指定できます。


ってことで、昔もめた。

引用返信 編集キー/
■33548 / inTopicNo.8)  Re[3]: 1ドットの点を書きたい
□投稿者/ よねKEN (283回)-(2009/03/03(Tue) 21:04:39)
> Graphics.PageUnit だと思います。

Graphics.PageUnitは今回の話題には直接は関係ないんじゃないでしょうか?

g.DrawLine(p, x, y, x, y) → 始点、終点が同じなので線が引かれない = 0ピクセル
g.DrawLine(p, x, y, x + 1, y) → 始点と終点を含めて、その間が線で結ばれるため = 2ピクセル

整数の引数指定では、0ピクセルの線の次は2ピクセルの線なので1ピクセルの点を打つことができない、という問題だと思います。
DrawLineでなくDrawRectangleでも同様です。それに対してFillRectangleは内部を塗りつぶすという仕様で、
始点は塗りつぶされるが終点は塗りつぶされないためうまく行きます。



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -