06-16-2016 11:55 PM
任意数値を8bitグレースケール、10Bitカラースケールで画像表示をする事が目的です。
イベントストラクチャを使用し数値制御器の値が変更された時に、ピクチャ表示をしています。
数値制御器の増減はキーボードのPageUp, Downがそれぞて割り当てております。
キーボードを長押しした時に数値制御器の増減は正しく追従するのですが、10bitカラースケールの画像にかなりのディレイがあります。
長押し後に数値制御器の値は変化しないため、イベントは待機状態になっていると思いますが、
10bitカラースケールの画像表示がダラダラと動き続けます。
数値制御器と同様画像も高速で追従するようにしたいのですが、何か良い方法はありますでしょうか?
ご教示をお願い致します。
※LabVIEW2011を使用しております。IMAQを使わない方法でご提案いただけると幸いです。
06-19-2016 09:11 PM
パフォーマンスを計測するとFlattenPixmapに15msecかかっています。
この部分を高速化するのは難しいでしょう。
キューを使用した生産者消費者ループにして、イベント間の時間計測により、
15msec以内でイベントを発生しないようにすればいいのでは?
06-20-2016 07:26 AM
6_6様
コメントありがとうございます。
アドバイスを参考に少しトライアルしてみます。
06-20-2016 02:25 PM
キューを使う方法のほかに、ノーティファイアを使う方法もあります。ノーティファイアは使用方法はキューによく似ていますが、受け取り側は最新の情報のみ受け取ります。生産者消費者ループで、消費者ループが生産者ループに追従できない、必ずしも全ての計算を行う必要がない場合(計算結果が表示目的のみなどの場合)は、こちらの方がプログラムが簡単です。
06-20-2016 07:33 PM
TailOfGon様
コメントありがとうございます。
キュー、ノーティファイアともに少し触ってみましたが、私のLabVIEWの習熟度から理解するまでに少し時間がかかりそうです。
勉強してみます。
今回投稿致しました件は、表示の過程も大切です。デジタル制御器の値の変化と同じほぼ同じスピードでピクチャも変化し追従する必要がありました。
6_6様のコメントにもありましたとお1440x1050配列のPixmapの処理に時間を要しておりました。
今回の処理は単色のベタ塗りで良い為1x1配列のPixmapで処理を行い、ピクチャのプロパティノードからスケール係数で拡大する事で処理速度を向上できそうです。
6_6様、TailOfGon様より頂いたコメントでキューやノーティファイアも使えるかもしれない事がわかりました。
もっと勉強し習熟度を上げてトライアルしてみます。
ありがとうございました。
06-20-2016 09:33 PM
配列初期化などに時間がかかる要因は他にもありそうです。パフォーマンス計測では計測されないようでした。
(実際の計測では配列初期化は必要のない部分かもしれませんが。)
それよりも気になる点をふたつ。
まず、数値型の認識が出鱈目です。最終的に24bit(32bit)で画像化するのに64bitや32bitどうしでビット結合するなど。
数値型をあやふやにしていると、いつまでも余計なバグに悩むことになります。
次にビット演算部分は、一度文字列に変換していますが、普通はビットマスクとビットシフトと和で組み立てます。
(亜流でも何とか自分なりに解決法をひねり出していることは好きですが。)
06-20-2016 10:51 PM
6_6様コメントありがとうございます。
ご指摘の通り添付したファイルはバグがあり、数値結合の前に8bit変換を追加する必要があります。
06-21-2016 02:03 AM
ピクチャではなくカラーボックスの使用では今回の要件は満たせないでしょうか?
http://zone.ni.com/reference/ja-XX/help/371361J-0112/lvconcepts/fp_controls_indicators/
カラーボックス
カラーボックスは特定の値に相当する色を表示します。たとえば、カラーボックスを使用すると、範囲外の値などのさまざまな状態を識別できます。カラー値はRRGGBBの形式の16進数で表現します。最初の2桁(RR)は赤のカラー値を制御します。次の2桁(GG)は緑のカラー値を制御します。最後の2桁は青の値を制御します。
操作ツールまたは色付けツールでカラーボックスをクリックしてカラーパレットを表示し、カラーボックスの色を設定します。