|
みなさん、ご意見ありがとうござます!返事が遅くなってしまいすみません。
■No15929 (PATIO さん) に返信
>オフスクリーン描画といわれている手法です。
おそらく、Bitmapクラスのsetpixelを使って描画する方法がそれに当たると思い、
再びトライしてみたところ、裏で描いてる時間は多少かかるものの、
表示は一瞬で出来るようになりました!
ありがとうございます!
>多分、座標計算して描画した方が早いのではないかと思いますが、
描画した画像を回すと、回転後の画像がぼやけてしまったので、座標を計算しなおしてから、描画させてみます!
■No15959 (組込系の人 さん) に返信
>DirectXについて
一番はじめにDirectXを使ってみたのですが、
ループ処理によって常に再描画をする、という仕組みから(ここをちゃんと理解していないのかもしれませんが)、
十万点を再描画させ続けると、全ての点が一度に描画される事がなく、
常にパラパラと、部分部分だけ表示される状態になってしまったので、
「やはり十万点は量が多すぎるのか。。」
とあきらめて、ループ処理ではない、graphicsクラスや、Bitmapクラスを使ってみることにしました。
しかし、今一度、DirectXも学びなおしてみます。
ご意見ありがとうございます。
■No15960 (Jitta on the way さん) に返信
>ちょっとよくわからないのですが、描画単位をなににしていますか?ケータイからなので調べにくいので調べませんが、ピクセル単位に描画させれば、整数指定で大丈夫だと思います。
描画単位を全く指定していません。(指定の仕方を把握できてません。。)
Bitmapクラスを使って描画する時には、ピクセル単位だとは思っているのですが、
Graphicsクラスを使って描画する時には、FillRectangleの第4・5 引数にfloat型が入ったので、
なるべく小さな四角形にするために、0.5という数字をいれました。ちなみに0.1にすると、表示されませんでした。。
>Matrixというクラス
ネット上でサンプルを見ながら、RotateAtメソッドを使ってみました。
ありがとうございます!
------------------------------------------------------------
みなさんに、いろいろなご意見を頂くことができ、本当に勉強になります。ありがとうございます。
一応今現在のソースコードを簡単に載せてみます。
描画までは良いのですが、回転に関して、一度描画した画像を回すと、回転後の画像がブレたような感じになってしまったので、次は、座標を計算しなおしてから、描画させるという方法をとってみようと思っています。
描画部分↓↓
Bitmap bm = new Bitmap(Picturebox1.Width, Picturebox1.Height);
float xP, yP;
中略(xP,xYに、座標データ:構造体配列ah[100000]から値を代入)
for (int i = 0; i <= 99999; i++)
{
xP = ah[i].dx;
yP = ah[i].dy;
//裏で描画
bm.SetPixel((int)xP, (int)yP, Color.White);
//g.FillRectangle(Brushes.White, xP, yP, (float)0.5, (float)0.5);
(こちらだと、描画に時間がかかってしまいましたので、今はsetpixelメソッドを。。)
}
//ピクチャボックスに表示
Picturebox1.Image = bm;
回転部分↓↓
Graphics g = Display1.CreateGraphics();
Matrix mx = new Matrix();
mx.RotateAt(15, new Point(bm.Width / 2, bm.Height));(bm:先ほど作ったBitmapクラスのインスタンス)
g.Transform = mx;
g.DrawImage(bm, new Point(0, 0));
|