質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

2686閲覧

pictureBoxのImageとPaintを合成した画像保存の方法

aha1009

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/06/03 09:01

PictureBoxに表示したBitmap上で二点クリックした寸法線をPaintEventHandlerで表示することはできましたが、
PictureBox.Image.Save()では、当然ながらPaint寸法線が保存されません。

そこで質問なのですが、ImageにPaintをオーバーレイする手法はありますでしょうか(フォトレタッチソフトのレイヤー合成みたいな)。
参考サイトや検索キーワードをご教示下さい。

C++の数値計算系は得意なのですが、Visual系はあまり経験はありません。
PaintやImageをレイヤーのように考えると、レイヤー結合機能は合っても良いはずなのに、
参考サイトが見つけられませんでした。
考え方が合っている/違っているのもご教授くだされば幸いです。

■ 合成したい理由
複数の寸法線が惹かれることを想定すると、PaintEventHandler内で
Graphics g = Graphics.FromImage(pictureBox.Image);
… Graphics描画
pictureBox.Refresh();
すると、寸法線のUnDoがしにくいです。

以上、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ImageのListを作って、線を一本描画するごとに、ImageをListに追加。
UNDOするときは、最新のListからImageを取り出す。
この方法だと、普通にGraphicsで描画してもUNDOが使えます。
ここが参考になると思います。

投稿2019/06/03 15:18

k.matsuda

総合スコア293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aha1009

2019/06/07 06:08

Imageをリスト化する発送はなかったため、とても参考になりました! ご回答、誠にありがとうございます!
guest

0

PictureBox.Image.Clone でイメージを複製し、そこに PaintEventHandler で描いていたものを書き、それを保存してください。

投稿2019/06/03 11:04

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aha1009

2019/06/03 11:41

ご回答ありがとうございます。 >そこに PaintEventHandler で描いていたものを書き、 この部分が理解できませんので、詳しく教えて下さい。 pictureBox.Image= bmpOriginal; pictureBox.Paint += new PaintEventHandler(this.FormPaint); ここまでは問題ないと思いますが、合ってますでしょうか。 Bitmap bmp= (Bitmap)pictureBox.Image.clone(); このbmpに入るのは、bmpOriginalのコピーだと思います。 「 PaintEventHandler で描いていたもの」=pictureBox.Paintとなると認識したため、このbmpに出力の仕方が分かりません。 ご教授のほどよろしくお願い致します。
Zuishin

2019/06/03 11:45 編集

PaintEventHandler の中身はどうなっていますか? そこで PictureBox の Graphics に何かを描画しているのではないですか? Graphics.FromImage で Image の Graphic を取得できます。そこに PaintEventHandler で描いたものと同じものを描いてください。
guest

0

画像処理系は門外漢なので素人考えで恐縮ですが、表示まで上手くいっているのであれば、その表示領域をキャプチャして画像を保存してはダメでしょうか?

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

投稿2019/06/03 09:58

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aha1009

2019/06/03 10:53 編集

ご回答ありがとうございます。 なるほど、スクリーンキャプチャする方法もあるのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問