07-06-2021 11:17 PM
LabVIEWのフロントパネル上の画像の保存について質問があります。
フロントパネルに表示されるxy平面視点や3D視点のグラフの画像を保存する際、
灰色の枠やカラーバーの部分を除いて、白背景の領域の部分のみを保存する
ことは可能でしょうか。
もし可能であれば、その方法をご教授頂けるでしょうか。
07-07-2021 01:47 AM
3Dグラフですか?
基本的には制御器の画像を取得し非平坦化してから切り出すのですが、3Dグラフは描画領域のサイズが取得できないので切り出し範囲を決め打ちしないといけません。
07-08-2021 12:36 AM
J.H.Watson様
分かりました。3Dグラフの切り出し範囲の決め打ちはLabVIEWのプログラム内で
行うことはできますか?
07-08-2021 02:58 AM
VIスニペットを添付します。上半分はLabVIEWに付属のサンプルVIです。
インボークノードで画像が取得できる制御器で使えると思います。
07-13-2021 02:19 AM
J.H.Watson様
添付していただいた画像を参考にしたところ、フロントパネルの画像を
必要な範囲の切り取りを行って取得できました。ありがとうございます。
関連した質問ですみません。
現在、3D Surfaceという表示器でフロントパネルに生成された画像を
インボーグノードで取得しているのですが、プログラムを実行して計測すると、
フロントパネルに表示される画像と保存される画像では一回分ずれがあります。
一回目の計測ではフロントパネルに計測結果が表示されますが、保存された
画像は軸のみ(白の背景)となっており、もう一度計測するとフロントパネルの
画像は新しく更新され、一回前の計測結果のグラフが画像として保存される、
といった形です。
計測した結果をフロントパネルと画像のどちらにも同時に反映させるには
どうすればよいでしょうか。
また、一つの表示器やフロントパネルの画像から3Dと2D視点の二つの画像を
取得することは可能でしょうか。
07-13-2021 05:05 AM
一回遅れるというよりは、グラフの描画が完了しないうちに画像を取得してしまうのが原因です。プログラムでファイル名を生成して保存するとそうなります。
画像を取得するメソッドの前に若干の遅延時間を置くと改善すると思います。
07-13-2021 05:26 AM
> また、一つの表示器やフロントパネルの画像から3Dと2D視点の二つの画像を取得することは可能でしょうか。
制御器のプロパティはプロパティノードで操作できます。グラフの表示方向をセットしてから画像を取得すれば良いでしょう。
添付のVIは、「画像をファイルに保存」メソッドを使って一時ファイルに書き出し、それを再読み込みして切り出します。
このメソッドは自動的に描画完了後(しかも描画範囲+枠線)のイメージを取得してくれます(ただし制御器パレットのアイコンでバックがグレーのヤツ特有です)。
使用するグラフに合ったメソッドのほうを使ってください。
07-23-2021 02:41 AM
J.H.Watson様
添付されたVIを参考にしたところ、こちらで待ち時間を指定したりせずに
自動で描画完了後のグラフをトリミングし、画像を保存することが出来ました。
ありがとうございます。
2Dグラフ(XY視点)についてですが、グラフが描画される白い領域だけでなく、
軸の名前と目盛の数値を含めて、こちらも自動でグラフの描画完了後に
トリミングをして画像の保存を行うようにプログラムを作成することは
できるでしょうか。
インボーグノードを用いた方法について、「画像を取得」ではグラフの描画を
待つための時間設定が必要であり、「画像をファイルに保存」ではグラフの
描画完了を自動で待つものの、白い領域の外側は保存されないので、
どうすればよいでしょうか。
07-23-2021 10:43 PM
「画像をファイルに保存」を描画完了の待ちに使えば「遅延時間」VIは無くせますね。
・・・ってやってみたらグラフの境界と描画エリアの位置関係は固定のようなので、グラフのサイズ変更に対応できるかもしれないと気がつきました。
添付のVIは、最初に3Dを「画像をファイルに保存」して描画サイズを取得し、2Dは「画像を取得」して3Dのサイズから割り出したオフセットを加えて切り出し範囲を決めています。
ウィンドウサイズを変えて実行してみてください。
両方のメソッドを持つ制御器でないとダメだし、フォントサイズが変わると調整が必要かもしれません。