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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.8378 の関連記事表示

<< 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)
記事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 -