No.1ベストアンサー
- 回答日時:
>初心者なのでわからないことだらけですが、よろしくお願いします!
というか初心者でいきなりGUIDEとかを使えてる時点で十分すごいと思うんですが。私自身GUIDEをそれなりに使えるようになるまでには結構時間かかりましたから。
さて、imageを現在あるaxesに貼り付けたいということでしたら、imageプロパティの中にParentという項目があるので、そこを貼り付けたい軸にしてやればできるはずです(現在Matlabが動かせる状況にいないので100%の保証はしませんが)
ただ、確かimage(X,Y,C,'PropertyName',PropertyValue)という書き方にする必要があった(気がする)ので、XとYも仕入れておく必要があります。といっても、大事なのは最大値と最小値だけですし、C(imageデータ)だとしてsize(C)とすればCに入っている第一成分が縦(つまりYの長さ)、第二成分が横になりますのでそこから求めてもかまいません。
あと、parentを直接指定する書き方をした場合、y軸が反転しないまま(yの値が小さい方が下。単にimage(C)とした時はyの値が小さい方が上になるよう自動調整されている)なので、set(axes1,'Ydir','Reverse')としてy軸を反転させる必要があります。
いろいろごちゃごちゃ書いてすみません。分からないところ等あればその旨補足いただければと思います。
参考になれば幸いです。
この回答への補足
丁寧な回答ありがとうございます。
いろいろと思考錯誤して、
h = gca; %カレントfigureに対するカレントaxesハンドル番号の取得
a = imread('gazou.jpg');
image(500,500,a,'Parent',h);
のように記述したのですが、ハンドルが空で上手くいきません(><)
guideで作成したGUIをカレントfigureに認識?できていないのが原因だとは思います。。。
新たにfigureが立ち上がってしまいます。
現在の流れは
GUI上に作成したスタートボタンでset_param('シミュリンクのファイル名','SimulationCommand','start') % シミュレーション開始
↓
simulink上のMファイルで、入力の値に応じて画像表示
です。
GUIのMファイル上でimageを記述すればGUI上のaxesに表示はされるのですが、
simulinkの実行結果(Output)ごとにリアルタイムで画像を切り替えてアニメーションにしたい為、
simulink上のMファイルにimageを記述したいと考えています。
h = figure(figureハンドル番号);
としてfigureを指定したいところなのですが、gcfで取得したハンドル番号を直接書いたりしても上手くいきませんでした(><)
むしろなぜできないのかもよくわからなくなってきています笑
もし何かアドバイスなどがあれば、よろしくお願いします(´;ω;`)
No.2
- 回答日時:
再びKulesです。
そうですね…私自身Simulinkを使ったことがないのでそちらに関して正確なことはわからないのですが。
ひとまず先に前回の回答の訂正です。
>size(C)とすればCに入っている第一成分が縦(つまりYの長さ)、第二成分が横になりますのでそこから求めてもかまいません。
と書きましたが、image(X,Y,C)のXとYに必要なのは最大値、最小値です。(Xの成分が1つしかない場合、それは最小値と解釈されます)
ですので、
>image(500,500,a,'Parent',h);
と書くとX軸、Y軸の範囲は500~1000、500~1000になってしまいます。
もし1~500の範囲で描きたいのであれば、
image([1,500],[1,500],a,'Parent',h);
とする必要があるはずです。
とりあえず
>guideで作成したGUIをカレントfigureに認識?できていないのが原因だとは思います。。。
>新たにfigureが立ち上がってしまいます。
に関してですが、現在パソコン画面のどこかにaxesがあるにも関わらずgcaコマンドで新しいaxesが立ち上がるということは、
axesの中にあるプロパティhandlevisibilityがoff、またはcallbackになっている可能性が高いです。
axes自体はGUIDEで配置しているんですよね?プロパティエディタで確認してみてください。
handlevisibilityがoffやcallbackになっているオブジェクトのハンドルを探す方法はいろいろありますが、
一番簡単(かはわからないけど最近私はこうやって探すようにしている)なのは、
あらかじめaxesのプロパティTagに適当な名前をつけておいて、
findallを使う方法です。
例えば、
figure;
h=gca;
set(h,'Tag','ABC');
としておけば、そのあと
set(h,'HandleVisibility','Off');
としても、
h1=findall(0,'Tag','ABC');
とすれば先ほど作ったaxesのハンドルを取得できます。
handlevisibilityをonにしてh=gca;でもいいんですが、それをすると変なタイミングでそのaxesが使われてしまったりするので
お勧めできません。また、guidata(handle,Data)を使ってfigureにハンドルを覚えさせておくと言う手もありますが、その場合figureのハンドルをどうやって取得するんだって話になり、やはりお勧めできません。
tagをつけてfindallで探すのが一番変更が少なく、簡単だと思います。
参考になれば幸いです。
回答ありがとうございます。
先ほど無事解決することができました(´;ω;`)
先日の回答と含めていろいろと原因を探ってみたところ、Simulink内でループ(入力と出力の繰り返し)した際に、ハンドル(h)の中身が初期化されていた為、ハンドル指定が上手くできていなかったようです。
image([1,500],[1,500],a,'Parent',h);
と記述した場合も、初めの1回は実際にはきちんと表示できていましたが、残りのループで[h]が空だった為、エラーが起こっていたようです(デバッグをしてようやく気づきました、すみません)
また、自分の作成したaxesのハンドル番号をgcaで取得できていなかった事も原因でした。
axesのプロパティをいくつか変更した為、取得できなくなっていたようです。
ご指摘の通り、findallのtag検索を用いたら上手くいきました。
まとめると、やや強引ですが、GUI上のMファイルに
global c;
h = findall(0,'Tag','axes1');
c = h;
としてハンドル番号を取得しておき、Simulink上のMファイルに
global c;
a = imread('a.jpg');
image([1,500],[1,500],a,'Parent',c);
と記述しています。
あとはif文などを用いて、入力の値に応じて原始的に画像の切り替えを行うことにします(苦笑
親身になって回答していただいて本当にありがとうございました!
実は、教えてgoo自体初めて利用するのでよくわからなかったのですが、大変参考になりました。
先日の解答をベストアンサーに選ばさせていただいております。
長々となりましたが、もしまた機会がありましたらご指導の程、よろしくお願いします(><)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- Windows 8 Route Generator の使い方 1 2023/05/03 00:36
- HTML・CSS 疑似要素で背景画像に指定したSVG画像の色変更 2 2023/01/30 22:45
- UNIX・Linux centos7のGUI画面でamidemux(動画編集あぷり)を操作作業していたら急に画面がCUI風 1 2023/02/24 10:40
- Windows 10 Windows11タスクバーやエクスプローラー、スタートメニュー 動画全画面時にカーソルが見えない 1 2022/04/08 00:03
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- その他(パソコン・周辺機器) ユーザーインターフェースについての質問です。 3 2023/05/05 17:32
- その他(OS) WindowsServer2019でWORKGROUPのRDSの設定 1 2023/02/15 17:43
- Windows 10 Windows10の画像ファイルのサムネールがアイコン表示になってしまいました。 3 2022/07/09 13:01
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
EXCEL VBA オートシェイプナン...
-
VBAで別のシートに図形描画
-
VBAで既に開いている別アプリケ...
-
Word、VBAでの取り消し線文字の...
-
VBからPDFファイル自動生成...
-
VBAで作成するメール(開封確認...
-
PowerPointVBAでスライドマスタ...
-
テキストボックス中の文字列の...
-
VBAで Set wb = Sheets(1).Cop...
-
エラー91 オブジェクト変数また...
-
AccessVBAからWordのマクロを実...
-
VBScriptからDLL参照設定したい
-
VBでPDFファイルを編集する
-
vbaからIEを操作するための記載...
-
コードの意味が分からないので...
-
エクセルでダウンロードするには?
-
InternetExplorer.Application...
-
VBのプログラムミング
-
VBAについてです。 初心者です...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
Excelでフィルタをかけると警告...
-
VBAで既に開いている別アプリケ...
-
エクセルマクロエラー「'Cells'...
-
テキストボックス中の文字列の...
-
VBAで Set wb = Sheets(1).Cop...
-
ある文字列が全て数字であるか...
-
VBAからPDFファイルにパスワー...
-
VBScriptでファイルの日時順(降...
-
EXCEL VBA オートシェイプナン...
-
[VBA]CDOメッセージ送信エラー
-
エクセルVBAで2つの画像を比較...
-
PowerPointVBAでスライドマスタ...
-
UserForm1.Showでエラーになり...
-
上下の位置揃えについて
-
VBAについてです。 初心者です...
-
VBAで作成するメール(開封確認...
おすすめ情報