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

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

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

Re[6]: マウスイベントを利用したグラフィク表示について


(過去ログ 21 を表示中)

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

■8729 / inTopicNo.1)  マウスイベントを利用したグラフィク表示について
  
□投稿者/ tikara (1回)-(2007/10/09(Tue) 11:16:44)

分類:[.NET 全般] 

マウスイベントを使って、いろいろな模様を使るプログラムを作りました。しかし、描画された画像がクリップボードに表示されません。
それで描画した模様を保存できるようにBitmap、pictureBox.refreshなどで記述するとコピーはできるようになったのですが、今度は
描画した模様を消去するボタン(pictureBox1.Image=null;)を押すとエラーがでるようになりました。これはC#の仕様なのでしょうか?
引用返信 編集キー/
■8730 / inTopicNo.2)  Re[1]: マウスイベントを利用したグラフィク表示について
□投稿者/ IIJIMAS (40回)-(2007/10/09(Tue) 11:29:09)
No8729 (tikara さん) に返信
> マウスイベントを使って、いろいろな模様を使るプログラムを作りました。しかし、描画された画像がクリップボードに表示されません。
> それで描画した模様を保存できるようにBitmap、pictureBox.refreshなどで記述するとコピーはできるようになったのですが、今度は
> 描画した模様を消去するボタン(pictureBox1.Image=null;)を押すとエラーがでるようになりました。これはC#の仕様なのでしょうか?

申し訳ありませんが、回答ではありません。

前の文と次の文がつながっていないと思います。
本気で問題を解決しようとしているなら閲覧者に状況がわかるように書いてください。
引用返信 編集キー/
■8772 / inTopicNo.3)  Re[2]: マウスイベントを利用したグラフィク表示について
□投稿者/ tikara (2回)-(2007/10/09(Tue) 22:11:30)
No8730 (IIJIMAS さん) に返信
> ■No8729 (tikara さん) に返信
>>マウスイベントを使って、いろいろな模様を使るプログラムを作りました。しかし、描画された画像がクリップボードに表示されません。
>>それで描画した模様を保存できるようにBitmap、pictureBox.refreshなどで記述するとコピーはできるようになったのですが、今度は
>>描画した模様を消去するボタン(pictureBox1.Image=null;)を押すとエラーがでるようになりました。これはC#の仕様なのでしょうか?
>
> 申し訳ありませんが、回答ではありません。
>
> 前の文と次の文がつながっていないと思います。
> 本気で問題を解決しようとしているなら閲覧者に状況がわかるように書いてください。
すみません。もう一度説明します。
まず、マウスイベントをつかってベジェ曲線のような美しい線を作るプログラムを作りました。それで描画された画像をクリップボードにコピーできるようにしてほかのソフトに貼り付けたいと思いました。しかし、graphicメソッドで作ってgraphicオブジェクトを作成した場合はは、クリップボードにコピーできないようです。それでBItmapオブジェクトを作成してimageプロパティからgraphicオブジェクトを作成するようにしました。そうするとコピーはできるようになったのですが、問題が発生しました。描画した画像をpictureBox1.image=null;のコードで記述したボタンを押すと、消去はできますが、消した後に再度マウスでなぞるとエラーがでるようになってしまいました。
これでわかっていただけましたか?よろしくお願いいたします。
ちなみにコードは以下の通りです(VC#2005)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private bool drawflag;
private Point start;
private Point end3;


private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
drawflag = true;
start.X = e.X;
start.Y = e.Y;

}

}


private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (drawflag == false)
{
return;
}

end3.X = e.X;
end3.Y = e.Y;


Point start = new Point();
Point control1=new Point();
Point control2=new Point();
Point control3=new Point();
Point control4=new Point ();
Point end1=new Point();
Point end2=new Point();



Point[] bezierPoints ={ start, control1, control2, end1, control3, control4, end2 };



//矢印をつける
Graphics g = Graphics.FromImage(pictureBox1.Image);
Pen oldpen = new Pen(Color.Red, 1);
oldpen.EndCap = LineCap.ArrowAnchor;
g.DrawLine(oldpen, start, control1);
g.DrawLine(oldpen, control2, end1);
g.DrawLine(oldpen, end1, control3);
g.DrawLine(oldpen, control4, end2);
g.DrawLine(oldpen, end2,end3);
Pen zdpen = new Pen(Color.LimeGreen, 1);
oldpen.EndCap = LineCap.ArrowAnchor;
g.DrawLine(zdpen, start, control1);
g.DrawLine(zdpen, control2, end1);
g.DrawLine(zdpen, end1, control3);
g.DrawLine(zdpen, control4, end2);
g.DrawLine(zdpen, end2,end3);
Pen ppen=new Pen(Color.Aqua,1);
ppen.EndCap = LineCap.ArrowAnchor;

g.DrawLine(ppen, start, control1);
g.DrawLine(ppen, control2, end1);
g.DrawLine(ppen, end1, control3);
g.DrawLine(ppen, control4, end2);
g.DrawLine(ppen, end2,end3);


// Draw arc to screen.
Pen bluePen = new Pen(Color.Snow, 1);
g.DrawBeziers(bluePen, bezierPoints);

//リソースを開放する
oldpen.Dispose();
ppen.Dispose();

zdpen.Dispose();
bluePen.Dispose();
g.Dispose();
pictureBox1.Refresh();
//開始位置を更新

start.X = end3.X;
start.Y = end3.Y;

}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
drawflag=false;

}

private void button1_Click(object sender, EventArgs e)
{
Clipboard.SetData(DataFormats.Bitmap, pictureBox1.Image);
}

private void Form1_Load(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.Image = bmp;

}

private void button2_Click(object sender, EventArgs e)
{
pictureBox1.Image = null;




}

引用返信 編集キー/
■8775 / inTopicNo.4)  Re[3]: マウスイベントを利用したグラフィク表示について
□投稿者/ 魔界の仮面弁士 (462回)-(2007/10/09(Tue) 23:03:58)
2007/10/09(Tue) 23:04:35 編集(投稿者)

No8772 (tikara さん) に返信
> それでBItmapオブジェクトを作成してimageプロパティからgraphicオブジェクトを作成するようにしました。
それで良いと思いますよ。ただ、正しくは
  BItmap → Bitmap
  image → Image
  graphic → Graphics
ですよね。(C# を使っているのですから、大文字/小文字の違いにも御注意を)


> 描画した画像をpictureBox1.image=null;のコードで記述したボタンを押すと、消去はできますが、
> 消した後に再度マウスでなぞるとエラーがでるようになってしまいました。
『エラー』というのは、ArgumentNullException 「値を Null にすることはできません。」というヤツですか?
だとしたら、それは当然の結果です。

Graphics は「描画ツール(ペン/ブラシ/塗りつぶし色など)」を意味するクラスです。
Bitmap という「キャンバス/紙」に描画するならばともかく、
null すなわち「何もないところ」に描画させようというのは、無理がありますよね。


> これはC#の仕様なのでしょうか?
Image に null を代入したのですから、その後の
> Graphics g = Graphics.FromImage(pictureBox1.Image);
の処理というのは、
 Graphics g = Graphics.FromImage(null);
の意味になりますよね。ここに null を指定すると「例外」が発生することは、ヘルプにも明記されています。
http://msdn2.microsoft.com/ja-jp/library/system.drawing.graphics.fromimage%28VS.80%29.aspx


> これでわかっていただけましたか?よろしくお願いいたします。
「null」を代入するのではなく、「何も描画していない Bitmap」を割り当ててみては如何でしょう。
引用返信 編集キー/
■8785 / inTopicNo.5)  Re[4]: マウスイベントを利用したグラフィク表示について
□投稿者/ tikara (3回)-(2007/10/10(Wed) 09:46:21)
No8775 (魔界の仮面弁士 さん) に返信
> 2007/10/09(Tue) 23:04:35 編集(投稿者)

> 「null」を代入するのではなく、「何も描画していない Bitmap」を割り当ててみては如何でしょう。
 おかげさまで解決しました。丁寧でたいへんわかりやすいご説明に感謝いたします。ありがとうございました。
次いでといっては申し訳ないのですが、描画した画像をコピーして、ペイントに貼り付けたときに、背景の色が若干異なるようなのですが
この部分は、どのような処理をほどこせばよいのでしょうか?ヒントだけでもおしえていただけたらと思います。
引用返信 編集キー/
■8831 / inTopicNo.6)  Re[5]: マウスイベントを利用したグラフィク表示について
□投稿者/ 魔界の仮面弁士 (467回)-(2007/10/11(Thu) 09:40:15)
2007/10/11(Thu) 12:34:46 編集(投稿者)

No8785 (tikara さん) に返信
> 描画した画像をコピーして、ペイントに貼り付けたときに、背景の色が若干異なるようなのですが
> この部分は、どのような処理をほどこせばよいのでしょうか?ヒントだけでもおしえていただけたらと思います。
IIJIMAS さんの真似というわけではないのですが、『閲覧者に状況がわかるように書いてください』。

実際に tikara さんの画面を見ているわけではないので、単に色が「若干」異なるとだけいわれても、
具体的にどのように変化しているのかを窺い知ることができませんので、判断に困ってしまいます。

できれば、第三者が現象を確認できるよう、描画/コピー処理の修正後のコードの提示と、
背景色が変化した時のコピー前/コピー結果それぞれの色を、具体的な RGB 値で教えてください。

見た目だけの話だとしたら、色の「錯視」の可能性もありえますので…。
http://www.psy.ritsumei.ac.jp/~akitaoka/color.html
引用返信 編集キー/
■8875 / inTopicNo.7)  Re[6]: マウスイベントを利用したグラフィク表示について
□投稿者/ tikara (4回)-(2007/10/12(Fri) 09:25:13)
No8831 (魔界の仮面弁士 さん) に返信
> できれば、第三者が現象を確認できるよう、描画/コピー処理の修正後のコードの提示と、
> 背景色が変化した時のコピー前/コピー結果それぞれの色を、具体的な RGB 値で教えてください。
画像のRRG値はどうしたらわかるのでしょうか?
背景色は、piictureBoxでは黒に設定してますが、ペイントや花子に貼り付けると青色になってしまいます。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -