C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ1)
(過去ログ2)
(過去ログ3)
(過去ログ4)
(過去ログ5)
(過去ログ6)
(過去ログ7)
(過去ログ8)
(過去ログ9)
(過去ログ10)
(過去ログ11)
(過去ログ12)
(過去ログ13)
(過去ログ14)
(過去ログ15)
(過去ログ16)
(過去ログ17)
(過去ログ18)
(過去ログ19)
(過去ログ20)
(過去ログ21)
(過去ログ22)
(過去ログ23)
(過去ログ24)
(過去ログ25)
(過去ログ26)
(過去ログ27)
(過去ログ28)
(過去ログ29)
(過去ログ30)
(過去ログ31)
(過去ログ32)
(過去ログ33)
(過去ログ34)
(過去ログ35)
(過去ログ36)
(過去ログ37)
(過去ログ38)
(過去ログ39)
(過去ログ40)
(過去ログ41)
(過去ログ42)
(過去ログ43)
(過去ログ44)
(過去ログ45)
(過去ログ46)
(過去ログ47)
(過去ログ48)
(過去ログ49)
(過去ログ50)
(過去ログ51)
(過去ログ52)
(過去ログ53)
(過去ログ54)
(過去ログ55)
(過去ログ56)
(過去ログ57)
(過去ログ58)
(過去ログ59)
(過去ログ60)
(過去ログ61)
(過去ログ62)
(過去ログ63)
(過去ログ64)
(過去ログ65)
(過去ログ66)
(過去ログ67)
(過去ログ68)
(過去ログ69)
(過去ログ70)
(過去ログ71)
(過去ログ72)
(過去ログ73)
(過去ログ74)
(過去ログ75)
(過去ログ76)
(過去ログ77)
(過去ログ78)
(過去ログ79)
(過去ログ80)
(過去ログ81)
(過去ログ82)
(過去ログ83)
(過去ログ84)
(過去ログ85)
(過去ログ86)
(過去ログ87)
(過去ログ88)
(過去ログ89)
(過去ログ90)
(過去ログ91)
(過去ログ92)
(過去ログ93)
(過去ログ94)
(過去ログ95)
(過去ログ96)
(過去ログ97)
(過去ログ98)
(過去ログ99)
(過去ログ100)
(過去ログ101)
(過去ログ102)
(過去ログ103)
(過去ログ104)
(過去ログ105)
(過去ログ106)
(過去ログ107)
(過去ログ108)
(過去ログ109)
(過去ログ110)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
No.8378 の関連記事表示
ヒット / 19件
(1-19 を表示)
<<
0
>>
■8378
線のみ削除
□投稿者/ ゆう -
(2007/09/28(Fri) 15:13:50)
分類:[C#]
2007/09/28(Fri) 15:18:21 編集(投稿者)
はじめまして
C#でペイント的なプログラムを作成しています。
現在はペンカーソルでクリックイベント等を用いて書いた直線と読み込んだ画像をpictureboxに表示できます。
そして消しゴムカーソルにて画像のみ残してペンで書いた部分は消したいのですが可能でしょうか。
それを行うには、どうしたらよろしいでしょうか。
可能であればpicturebox内で処理したいです。
よろしくお願いします。
親記事 /過去ログ21より /
関連記事表示
削除チェック/
■8384
Re[1]: 線のみ削除
□投稿者/ 渋木宏明(ひどり) -
(2007/09/28(Fri) 15:36:57)
>
2007/09/28(Fri) 15:49:41 編集(投稿者)
> それを行うには、どうしたらよろしいでしょうか。
いわゆる「レイヤー」みたいな仕組みを自作するか、そういういっさいがっさいの機能を備えたコントロールをどこかから探してきて使うか、とかになります。
将来的にレイヤー機能が必要になるようなら、今のうちに調達してしまった方が話が早いです。
そんな予定は全然無くて、「絵の上に描いた線が消せればいい」ということなら、画像を別途読み込んで、「消しゴムをかけた範囲」に別途読み込んだ画像の「その範囲の画像」を Graphics.DrawImage() 等で部分的に描画してやれば実現可能です。
> 可能であればpicturebox内で処理したいです。
無理です。PictureBox は「画像を表示する」程度のことしか出来ません。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8391
Re[2]: 線のみ削除
□投稿者/ ゆう -
(2007/09/28(Fri) 15:59:32)
ありがとうございます。
レイヤー機能が必要になってくるようです。
少し調べてみましたけど実装が、かなり難しそうですね…
Visual StudioのC#とレイヤーの連携でお勧めのサイト等ありましたら、ご教授願います
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8400
Re[3]: 線のみ削除
□投稿者/ 渋木宏明(ひどり) -
(2007/09/28(Fri) 16:32:49)
>
> レイヤー機能が必要になってくるようです。
> 少し調べてみましたけど実装が、かなり難しそうですね…
作るとなるとちょっとメンドクサイですね。
> Visual StudioのC#とレイヤーの連携でお勧めのサイト等ありましたら、ご教授願います
Tips 系のサイトとか全然見ない人なので (^^;
「レイヤー」の、原理的なところは自体はそれほど難しく無いんですけどね。
# 時期未定ですけど、勉強会のネタ用にそのうちサンプル書くかもしれません。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8402
Re[4]: 線のみ削除
□投稿者/ ゆう -
(2007/09/28(Fri) 16:38:50)
ありがとうございます。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=7596
は拝見しました。C#初心者には難しい><
色々と調べてみたいと思います。
サンプル楽しみです☆
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8426
Re[5]: 線のみ削除
□投稿者/ 渋木宏明(ひどり) -
(2007/09/29(Sat) 07:23:47)
>
> サンプル楽しみです☆
レイヤーの実装だけでよければこんな感じです。
http://hidori.jp/downloads/junktest/TestLayer-20070929.zip
線とか消しゴムの実装は自分で考えてみてください。
線は特に難しいことは無いでしょう。
選択されてるレイヤーのビットマップに、今やってるのと同じように書き込めばOKなはず。
消しゴムは、普通のペイント系だと、選択されているレイヤーのビットマップの「消しゴムをかけた領域」を透明色で塗りつぶしてるだけのものが多いはず。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8726
Re[6]: 線のみ削除
□投稿者/ ゆう -
(2007/10/09(Tue) 10:18:14)
ありがとうございます☆
参考にさせていただきます!
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8788
Re[6]: 線のみ削除
□投稿者/ ゆう -
(2007/10/10(Wed) 11:12:25)
> 消しゴムは、普通のペイント系だと、選択されているレイヤーのビットマップの「消しゴムをかけた領域」を透明色で塗りつぶしてるだけのものが多いはず。
消しゴム処理を実装してみましたが透明色で塗りつぶすと透明で塗られるので元の線が消えずに、そのまま残ってしまいました…
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8791
Re[7]: 線のみ削除
□投稿者/ 渋木宏明(ひどり) -
(2007/10/10(Wed) 12:18:33)
>
> 消しゴム処理を実装してみましたが透明色で塗りつぶすと透明で塗られるので元の線が消えずに、そのまま残ってしまいました…
どこ(≒どのレイヤー)を透明色で塗りつぶしたんですか?
線の描かれたレイヤーを操作しないと意味をなさないのは分かりますよね?
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8796
Re[8]: 線のみ削除
□投稿者/ ゆう -
(2007/10/10(Wed) 16:58:49)
はい、そのレイヤーに対して消しゴム処理をかけてますが透明色で上書きされるため元の線を消すことは出来ないようです。。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8810
Re[9]: 線のみ削除
□投稿者/ 渋木宏明(ひどり) -
(2007/10/10(Wed) 22:32:29)
>
> はい、そのレイヤーに対して消しゴム処理をかけてますが透明色で上書きされるため元の線を消すことは出来ないようです。。
なんとなく原因が分かった気がする。
この前書いたサンプルのコードを改造して使っているなら、「透明色で塗る」のはレイヤーの Bitmap 直でないと駄目ですぜ。(ついでに言えば線を描くのも)
画像ファイルの読み込みのとこが「あーなってる」のは、画像ファイルの縦横サイズがキャンバス(と各レイヤーの Bitmap)の縦横サイズと同じである保証はないので「あーなってる」ます。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8849
Re[10]: 線のみ削除
□投稿者/ ゆう -
(2007/10/11(Thu) 13:30:42)
> この前書いたサンプルのコードを改造して使っているなら、「透明色で塗る」のはレイヤーの Bitmap 直でないと駄目ですぜ。(ついでに言えば線を描くのも)
ありがとうございます。
ビットマップの場合、SetPixelで書くのでMouseMove時に再描画を実行しても、すべて反映しきれずに途切れ途切れになってしまいます。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8869
Re[11]: 線のみ削除
□投稿者/ 渋木宏明(ひどり) -
(2007/10/11(Thu) 22:15:55)
>
> ビットマップの場合、SetPixelで書くのでMouseMove時に再描画を実行しても、すべて反映しきれずに途切れ途切れになってしまいます。
それ、別な問題ですよね?
Graphics.FromImage() で Bitmap から Graphics を作れば、そこに戦でも円でもかけますよ。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8801
Re[7]: 線のみ削除
□投稿者/ めか -
(2007/10/10(Wed) 19:06:36)
2007/10/10(Wed) 19:09:55 編集(投稿者)
■
No8788
(ゆう さん) に返信
>>消しゴムは、普通のペイント系だと、選択されているレイヤーのビットマップの「消しゴムをかけた領域」を透明色で塗りつぶしてるだけのものが多いはず。
>
> 消しゴム処理を実装してみましたが透明色で塗りつぶすと透明で塗られるので元の線が消えずに、そのまま残ってしまいました…
横合いから失礼します。
まだまだ初心者ですが、なんとなく思い当たったことがあるので…
もしかして、「透明な色」で塗りつぶしてたりしませんか…?
この場合の透明色は、いわゆる「背景色」もしくは、透過処理の対象の色だと思うのですが…
例:背景色が白の画面に黒で描く→消しゴムで消す ≒ 背景色(白)で塗る
透過処理対象の色(よく見るのは#ff00ff(紫)ですかね。)の画面に黒で書く → 消しゴムで消す ≒ 透過対象の色で塗る
ハズしてたらごめんなさい。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8809
Re[8]: 線のみ削除
□投稿者/ 渋木宏明(ひどり) -
(2007/10/10(Wed) 22:05:05)
>
> 透過処理対象の色(よく見るのは#ff00ff(紫)ですかね。)の画面に黒で書く → 消しゴムで消す ≒ 透過対象の色で塗る
.NET の Bitmap クラスはアルファチャンネルに対応しているので、「透過色」を使う必要はありません。
で、Bitmap クラスのアルファチャンネルを利用して重ね合わを行うのであれば、背景色で塗ってもイカンです。
例えば、「緑 (#ff00ff00)で塗りつぶされているところ」に「消しゴム」をかけるのであれば、「消しゴムをかけたところ」を「透明色(#00000000)で塗りつぶす」ばおkなのです。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8390
Re[1]: 線のみ削除
□投稿者/ IIJIMAS -
(2007/09/28(Fri) 15:57:36)
■
No8378
(ゆう さん) に返信
> 2007/09/28(Fri) 15:18:21 編集(投稿者)
>
> はじめまして
>
> C#でペイント的なプログラムを作成しています。
>
> 現在はペンカーソルでクリックイベント等を用いて書いた直線と読み込んだ画像をpictureboxに表示できます。
>
> そして消しゴムカーソルにて画像のみ残してペンで書いた部分は消したいのですが可能でしょうか。
>
> それを行うには、どうしたらよろしいでしょうか。
>
> 可能であればpicturebox内で処理したいです。
> よろしくお願いします。
ご自分作られた(作られる)アプリの図形なら、描くタイミングで座標を記録して内部で図形
たとえば
GraphicsPath クラス
http://msdn2.microsoft.com/ja-jp/library/system.drawing.drawing2d.graphicspath
(VS.80).aspx
のコレクションを保持して、実際の画面(コントロール)にはそれと読み込んだ画像(背景の画像?)を
Paintイベント
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.paint
(VS.80).aspx
のハンドラですべて描画するようにすればよいと思います。
Graphics クラス
http://msdn2.microsoft.com/ja-jp/library/system.drawing.graphics
(VS.80).aspx
関連を使用します。
消すのはコレクションから削除すればいいと思います。
消すときなどの図形の選択などには
GraphicsPath.IsVisible メソッド
http://msdn2.microsoft.com/ja-jp/library/system.drawing.drawing2d.graphicspath.isvisible
(VS.80).aspx
が使えるのではと思います。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8393
Re[2]: 線のみ削除
□投稿者/ ゆう -
(2007/09/28(Fri) 16:07:48)
ありがとうございます。
当方、初心者なのでレイヤーでの実装が困難な場合、参考にさせていただきます。
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8401
Re[2]: 線のみ削除
□投稿者/ 渋木宏明(ひどり) -
(2007/09/28(Fri) 16:36:09)
>
> ご自分作られた(作られる)アプリの図形なら、描くタイミングで座標を記録して内部で図形
Undo/Redo を考慮してこういう実装を採ったりもしますが、この方式は描画する「ブツ」が増えると再描画がリニアに重くなります。
純粋なペイント系ではあんまりやらないんじゃないかな?
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
■8722
Re[3]: 線のみ削除
□投稿者/ ゆう -
(2007/10/09(Tue) 10:08:35)
ありがとうございます☆
参考にさせていただきます!
記事No.8378 のレス /過去ログ21より /
関連記事表示
削除チェック/
<<
0
>>
パスワード/
-
Child Tree
-