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

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

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

平行四辺形のラインを描画する

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

■103191 / inTopicNo.1)  平行四辺形のラインを描画する
  
□投稿者/ ろん (1回)-(2024/06/18(Tue) 17:24:27)

分類:[.NET 全般] 


VB.NETを使った質問です。

g.DrawLinesで太さのある曲線を描画した際に
ラインのエッジを垂直ではなく、


https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRgyPYNG8GebtkQK950nCjnRxtBEEbPwGp6hw&s

この画像のようにシアーをかけたものにしたいと考えています。

これって恐らく標準の機能だとできないでしょうか?

PointF配列からRectAnglesを何度も呼び出して
一つのラインとして繋げるしかないでしょうか?

もっと良い方法があれば教えてください。



引用返信 編集キー/
■103192 / inTopicNo.2)  Re[1]: 平行四辺形のラインを描画する
□投稿者/ WebSurfer (2905回)-(2024/06/18(Tue) 17:34:39)
No103191 (ろん さん) に返信

作っているアプリは何かと開発環境ぐらい書きましょう。
引用返信 編集キー/
■103193 / inTopicNo.3)  Re[1]: 平行四辺形のラインを描画する
□投稿者/ 魔界の仮面弁士 (3782回)-(2024/06/18(Tue) 17:36:11)
No103191 (ろん さん) に返信
> g.DrawLinesで太さのある曲線を描画した際に
> ラインのエッジを垂直ではなく、
> この画像のようにシアーをかけたものにしたいと考えています。

質問内容を理解できているか自信が無いのですが、アンチエイリアス処理とは別物ですか?
https://dobon.net/vb/dotnet/graphics/antialias.html
引用返信 編集キー/
■103194 / inTopicNo.4)  Re[2]: 平行四辺形のラインを描画する
□投稿者/ ろん (2回)-(2024/06/18(Tue) 17:46:27)
2024/06/18(Tue) 17:47:34 編集(投稿者)

ありがとうございます。

>WebSurfer 様


作っているアプリは何か
画像処理プログラム

開発環境
VS2022


>魔界の仮面弁士 様

アンチエイリアスとは別です。

Dim p As New Pen(Color.Black, 10)
g.DrawLines(p, 10, 20, 100, 200)

でラインを描画すると
ラインの両末端が以下の画像のようになります。

https://jice.homemate.co.jp/isc/my/life_support/keisanshiki/kihon/nagasa/img/02.gif?w=240&type=ld


これを
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRgyPYNG8GebtkQK950nCjnRxtBEEbPwGp6hw&s
のように斜めにしたいのですが
どのようにすれば良いでしょうか?


引用返信 編集キー/
■103195 / inTopicNo.5)  Re[1]: 平行四辺形のラインを描画する
□投稿者/ kiku (427回)-(2024/06/18(Tue) 17:48:35)
No103191 (ろん さん) に返信
> g.DrawLinesで太さのある曲線を描画した際に
> ラインのエッジを垂直ではなく、
> https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRgyPYNG8GebtkQK950nCjnRxtBEEbPwGp6hw&s
> この画像のようにシアーをかけたものにしたいと考えています。

シアーという言葉がわからなかったため、
検索すると、イラストレータなどで「斜めに傾ける」という機能に使う言葉のようでした。
これは、最初は、四角形に描画しておいて、
斜めに傾ける機能が実装されたボタンを押下すると
自動的に平行四辺形に再描画される機能を実現したいということでしょうか?

どんな機能を作りたいのか?
何に困っているのか?
をもう少し丁寧に解説頂けないでしょうか?
このままですと、誰も回答できないように思います。
引用返信 編集キー/
■103196 / inTopicNo.6)  Re[3]: 平行四辺形のラインを描画する
□投稿者/ ろん (3回)-(2024/06/18(Tue) 18:11:50)
画像を書いてみました。

http://www.floral-village.info/up/1718701843.png

この画像で

Dim p As New Pen(Color.Black, 10)
g.DrawLines(p, 10, 20, 100, 200)

で描画すると上のラインのようになりますが
下のラインのように末端を斜めにしたいという意味です。


引用返信 編集キー/
■103197 / inTopicNo.7)  Re[4]: 平行四辺形のラインを描画する
□投稿者/ KOZ (464回)-(2024/06/18(Tue) 21:14:11)
No103196 (ろん さん) に返信

うーむ。どうなんでしょう?

Imports System.Drawing
Module Module1
    Sub Main()
        Dim width As Integer = 200
        Dim height As Integer = 300
        Dim padding As Integer = 10
        Dim tilt As Integer = 100
        Dim rect As Rectangle = Rectangle.FromLTRB(padding, padding,
                                        width - padding, height - padding)
        Using canvas As New Bitmap(width, height)
            Using g As Graphics = Graphics.FromImage(canvas)
                g.Clear(Color.White)
                g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
                Dim pen As New Pen(Color.Black, 10)
                Dim points As PointF() = New PointF() {
                    New PointF(rect.Left + tilt, rect.Top),               ' 左上隅
                    New PointF(rect.Left, rect.Bottom),                   ' 左下隅
                    New PointF(rect.Right - tilt, rect.Bottom),           ' 右下隅
                    New PointF(rect.Right, rect.Top)                      ' 右上隅
                }
                g.DrawPolygon(pen, points)
            End Using
            canvas.Save("hoge.png")
        End Using
    End Sub
End Module

引用返信 編集キー/
■103198 / inTopicNo.8)  Re[5]: 平行四辺形のラインを描画する
□投稿者/ とくま (9回)-(2024/06/19(Wed) 08:58:02)
No103196 (ろん さん) に返信
曲線描画を自由にしたあと、末端の座標近辺を背景色の線で上書きしてカットするとか?
ただ、この傾きが何で決まるのか説明されてないので、座標から計算でできるものなのか?感覚で適当な傾きでカットしていいのか?w
引用返信 編集キー/
■103200 / inTopicNo.9)  Re[6]: 平行四辺形のラインを描画する
□投稿者/ ろん (4回)-(2024/06/19(Wed) 10:38:42)
KOZ様


ありがとうございます。

直線の場合にはFillPolygonを使えばこの方法でいけそうです。
曲線を作りたいのですが、
ForループでFillPolygonを繋げていくしかないでしょうか?
恐らく、つなぎ目がスムーズにはならないのではないでしょうか?



とくま様

背景は画像のため、上書きなどすることはできません。
この傾きはユーザーは変更できる仕様となっております。


引用返信 編集キー/
■103201 / inTopicNo.10)  Re[7]: 平行四辺形のラインを描画する
□投稿者/ とくま (10回)-(2024/06/19(Wed) 10:59:19)
No103200 (ろん さん) に返信
>背景は画像のため、上書きなどすることはできません。
背景と描画線を別管理して、背景色を透過色で管理して、描画線側だけで上書き
すればよいだけでは?

>この傾きはユーザーは変更できる仕様となっております。
1つの曲線を、曲線と、始点カット、終点カットの3つの部品で管理して
指定した傾きでカットするで、できる気はするけど。
引用返信 編集キー/
■103203 / inTopicNo.11)  Re[7]: 平行四辺形のラインを描画する
□投稿者/ KOZ (465回)-(2024/06/19(Wed) 19:26:10)
No103200 (ろん さん) に返信
> 曲線を作りたいのですが、
> ForループでFillPolygonを繋げていくしかないでしょうか?
> 恐らく、つなぎ目がスムーズにはならないのではないでしょうか?

曲線の場合は DrawCurve とか DrawBezier などですね。
使用例は dobon さんところにあります。

https://dobon.net/vb/dotnet/graphics/drawcurve.html

塗りつぶしは Grapchis.FillClosedCurve とか
https://learn.microsoft.com/ja-jp/dotnet/api/system.drawing.graphics.fillclosedcurve

引用返信 編集キー/
■103204 / inTopicNo.12)  Re[8]: 平行四辺形のラインを描画する
□投稿者/ ろん (5回)-(2024/06/19(Wed) 23:11:41)
FillPolygonでいけそうですね。
ありがとうございます。

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

このトピックをツリーで一括表示


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

このトピックに書きこむ