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

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

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

Re[6]: 画像の任意座標部分の切り取りについて(VB2010)


(過去ログ 130 を表示中)

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

■76975 / inTopicNo.1)  画像の任意座標部分の切り取りについて(VB2010)
  
□投稿者/ ぶぶ (1回)-(2015/09/02(Wed) 13:32:51)

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

Windows7 VB2010にて、画像を任意の座標点で切り取りたいのですが、
ネット等で調べてみましたが、一点を指定して、幅と高さを指定する方法しか
見つけることができませんでした。

台形や平行四辺形等変形した座標点でも図を切り抜きたいのですが、
どのようにしたら良いのでしょうか?

引用返信 編集キー/
■76977 / inTopicNo.2)  Re[1]: 画像の任意座標部分の切り取りについて(VB2010)
□投稿者/ 魔界の仮面弁士 (478回)-(2015/09/02(Wed) 13:35:06)
No76975 (ぶぶ さん) に返信
> 台形や平行四辺形等変形した座標点でも図を切り抜きたいのですが、
> どのようにしたら良いのでしょうか?

Graphics クラスの Clip プロパティを使ってみるとか。
引用返信 編集キー/
■77041 / inTopicNo.3)  Re[2]: 画像の任意座標部分の切り取りについて(VB2010)
□投稿者/ ぶぶ (2回)-(2015/09/07(Mon) 13:07:15)
No76977 (魔界の仮面弁士 さん) に返信
> ■No76975 (ぶぶ さん) に返信
>>台形や平行四辺形等変形した座標点でも図を切り抜きたいのですが、
>>どのようにしたら良いのでしょうか?
>
> Graphics クラスの Clip プロパティを使ってみるとか。

お返事ありがとうございます。

ヒントをもとに、Formに以下のコードでテストしてみました。
Formには2つのPicttureBoxをはり、PictureBox1には切り取り元の画像が300×250の
サイズで表示しています。
Picture2に切り取った結果画像を表示したいと考えております。

Imports System.Drawing.Drawing2D

Public Class Form1

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim g As Graphics = Graphics.FromImage(canvas)


Dim bmp As New Bitmap("e:\~01_VisualBasicサンプルPG作成\20150907_vb2010_画像Clip\clip_Bmp.bmp")
g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height)
bmp.Dispose()



Dim gpath As New GraphicsPath()
Dim points As Point() = {New Point(97, 82), _
New Point(219, 62), _
New Point(236, 202), _
New Point(115, 188)}
gpath.AddLine(points(0), points(1))
gpath.AddLine(points(1), points(2))
gpath.AddLine(points(2), points(3))
gpath.AddLine(points(3), points(0))

Dim rgn As New Region(gpath)

' ----- 描画先
Dim cut_canvas As New Bitmap(PictureBox2.Width, PictureBox2.Height)
Dim cut_g As Graphics = Graphics.FromImage(cut_canvas)

cut_g.Clip = rgn

PictureBox2.Image = cut_canvas

End Sub
End Class

Button1をクリックしても、エラーも出ませんが、結果も表示されず、手も足も出なくなりました。

根本的に使い方が間違っているのか・・・よろしくお願い致します。

引用返信 編集キー/
■77042 / inTopicNo.4)  Re[3]: 画像の任意座標部分の切り取りについて(VB2010)
□投稿者/ shu (775回)-(2015/09/07(Mon) 13:32:34)
No77041 (ぶぶ さん) に返信

提示コードを基にしたサンプルです。

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        ' ----- 描画先
        Dim cut_canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Dim cut_g As Graphics = Graphics.FromImage(cut_canvas)

        Dim gpath As New GraphicsPath()
        Dim points As Point() = {New Point(97, 82), _
        New Point(219, 62), _
        New Point(236, 202), _
        New Point(115, 188)}
        gpath.AddLine(points(0), points(1))
        gpath.AddLine(points(1), points(2))
        gpath.AddLine(points(2), points(3))
        gpath.AddLine(points(3), points(0))
        Dim rgn As New Region(gpath)

        cut_g.Clip = rgn
        cut_g.FillRectangle(Brushes.Blue, 0, 0, PictureBox1.Width, PictureBox1.Height)

        PictureBox1.Image = cut_canvas
        cut_g.Dispose()
        rgn.Dispose()
    End Sub

引用返信 編集キー/
■77043 / inTopicNo.5)  Re[4]: 画像の任意座標部分の切り取りについて(VB2010)
□投稿者/ ぶぶ (3回)-(2015/09/07(Mon) 13:59:27)
No77042 (shu さん) に返信
shuさん。お返事ありがとうございます。

提示していただいたコードを張り付けて確認しました。
このコードでは、切り抜く座標の形状は意図した形だったのですが、
表示する画像の内容はPicture1の内容から、指定した座標部分をくりぬきたかったのですが、
真っ青になってしまいました。

> cut_g.FillRectangle(Brushes.Blue, 0, 0, PictureBox1.Width, PictureBox1.Height)

Brushes.Blueを使用しているからでしょうか?

Picture1から指定した座標で切り抜いた画像はどうしたら取得できるのでしょうか?

よろしくお願い致します。

引用返信 編集キー/
■77044 / inTopicNo.6)  Re[5]: 画像の任意座標部分の切り取りについて(VB2010)
□投稿者/ Hongliang (342回)-(2015/09/07(Mon) 14:02:45)
g.DrawImage等を使います。
引用返信 編集キー/
■77045 / inTopicNo.7)  Re[5]: 画像の任意座標部分の切り取りについて(VB2010)
□投稿者/ shu (776回)-(2015/09/07(Mon) 14:06:37)
No77043 (ぶぶ さん) に返信

提示したコードはサンプルでありぶぶさんの求めるもの全てを記述した
完全コードではありません。
引用返信 編集キー/
■77046 / inTopicNo.8)  Re[6]: 画像の任意座標部分の切り取りについて(VB2010)
□投稿者/ ぶぶ (4回)-(2015/09/07(Mon) 14:16:37)
No77045 (shu さん) に返信
お手数おかけし申し訳ありません。
行き詰っていたので、飛びついてしまいました。
おかげさまで解決致しました。
ありがとうございました。
> ■No77043 (ぶぶ さん) に返信
>
> 提示したコードはサンプルでありぶぶさんの求めるもの全てを記述した
> 完全コードではありません。
引用返信 編集キー/
■77047 / inTopicNo.9)  Re[6]: 画像の任意座標部分の切り取りについて(VB2010)
□投稿者/ ぶぶ (5回)-(2015/09/07(Mon) 14:19:03)
No77044 (Hongliang さん) に返信
> g.DrawImage等を使います。

ありがとうございます。
早速、コードに取り込んでみました。

Imports System.Drawing.Drawing2D

Public Class Form1

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height)
Dim g As Graphics = Graphics.FromImage(canvas)


Dim bmp As New Bitmap("e:\~01_VisualBasicサンプルPG作成\20150907_vb2010_画像Clip\clip_Bmp.bmp")
g.DrawImage(bmp, 0, 0, bmp.Width, bmp.Height)
bmp.Dispose()



Dim gpath As New GraphicsPath()
Dim points As Point() = {New Point(97, 82), _
New Point(219, 62), _
New Point(236, 202), _
New Point(115, 188)}
gpath.AddLine(points(0), points(1))
gpath.AddLine(points(1), points(2))
gpath.AddLine(points(2), points(3))
gpath.AddLine(points(3), points(0))

Dim rgn As New Region(gpath)

' ----- 描画先
Dim cut_canvas As New Bitmap(PictureBox2.Width, PictureBox2.Height)
Dim cut_g As Graphics = Graphics.FromImage(cut_canvas)

cut_g.Clip = rgn
cut_g.DrawImage(canvas, 0, 0)

PictureBox2.Image = cut_canvas
cut_g.Dispose()
rgn.Dispose()

End Sub
End Class

無事に想定した内容で表示されました。

魔界の仮面弁士さん、shuさん、Hongliangさん、ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -