• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MATLABのGUIについて教えていただけないでしょうか。)

MATLABのGUIについて教えていただけないでしょうか。

Kulesの回答

  • Kules
  • ベストアンサー率47% (292/619)
回答No.1

CallBack中に変数を使いたい場合、 (1)引数として渡す (2)どこかに保存しておいて、そこから呼びだす の2通りが考えられると思います。私の場合、 (1)→(2)(予めmatfileとして保存し、その都度呼び出す)→(2)(guidataを使う) の順にスタイルが変わっています。 guidataはfigure内に値をストックするための関数で、figure内のハンドルであればどれを使ってもストックした変数を呼び出せるので大変便利です。 ということでそれを使える関数を書いてみました。 「 function MakeSlider(String,varargin) switch(lower(String)); case 'make'; InitSlider(varargin{1}); case 'imageslice'; MoveSlice; otherwise; error('関数MakeSliderの受け付ける動作は''Make''のみです') end; function InitSlider(Handle) H=guidata(Handle); H.slider=uicontrol(H.figure,'Style','Slider'); H.image=image(zeros(128,128)); H.axes=gca; set(gca,'PlotBoxAspectRatio',[1,1,1]); FigureSize=get(H.figure,'Position'); set(H.slider,'Position',[FigureSize(3)-30,10,25,FigureSize(4)-20]); set(H.slider,'Min',1,'Max',40,'Value',1,'SliderStep',[1,5]/39); set(H.slider,'CallBack','MakeSlider(''ImageSlice'');'); guidata(H.figure,H); return; function MoveSlice H=guidata(gcbo); SliceNum=(get(H.slider,'Value')); set(H.image,'Cdata',H.tempA(:,:,SliceNum)); return; 」 「」の間を1つのmファイル(MakeSlider.m)として保存し、 H.figure=figure(1); H.tempA=tempA; guidata(H.figure,H); MakeSlider('Make',gcf); のようにするとfigureの右端にsliderがつき、上または下矢印を押すことで1枚ずつ画像が変わります。 また、スライダのトラフを押すと一度に5枚先に飛ぶようにしてあります。 この関数自体決め打ちで値を入れているところが多いため 他の設定にするには中の値をいじるか、設定が変わっても柔軟に対応できるようにさらに改良する必要があります。 コメントをほとんどつけていないので、何をしているのかわからない部分があれば補足欄にお願いします。 以上、参考になれば幸いです。

yatz
質問者

お礼

お礼を書かないとベストアンサーがつけられない??試しに記入してみます。

yatz
質問者

補足

早速のご回答ありがとうございます。 しかし、せっかくなのですが、うまく理解できませんでした。 guihandle、guidataを用いて変数をやりとりする、という意味はなんとなくわかるのですが、どんな変数をどうやって保存するのか理解できません。本当に初歩的な問題なのだと思うのですが、ヘルプを読んでもネットを検索してもよくわからないんです。 オブジェクト(axisとかPushbuttonとか)はあらかじめデフォルトのハンドルを持っていますよね。これ以外にどんな変数でも好きに格納できる便利なハンドルを作れる、ということなのでしょうか?そのハンドル名はどうやって宣言したらいいのでしょう?? 教えていただいたスクリプトを実行してみましたが、 「set(H.image,'Cdata',H.tempA(:,:,SliceNum));」 の部分で「??? サブスクリプトインデックスは正の実数整数, またはロジカルである必要があります」 というエラーになるのですが…このような状況なのでせっかくのサンプルスクリプトをうまくかみ砕けませんでした。 おそらくかなりくだらないことを聞いているのだと思います。お忙しいようでしたら、もし、そんなこと質問する前にこの本を読むといいよ、というような本があれば教えていただけないでしょうか。門外漢な上に周囲に詳しい人もいないのでなかなか本を探すにも苦労しています。 いろいろ申し訳ありません。

関連するQ&A

  • MATLABのGUI、画像表示について

    GUIDEで設計したGUIのaxes1に画像を表示させようとしているのですが、 simulink上のMファイルに a = imread('a.jpg'); image(a); のようにimageを記述して、GUI上のオブジェクトを指定するにはどうしたらよいのでしょうか?? 新たにfigureを立ち上げるのではなく、GUIに表示させる方法がわからず困っています。 初心者なのでわからないことだらけですが、よろしくお願いします!

  • matlab matファイルから一部だけを読み込む

    Matlab初心者です、よろしくお願いします。 Matlabでn×m行列のデータが入っているmatファイルからx×y行列のデータを変数に読み込みたいのですが、どうすれば良いのでしょうか? ご教授していただけると助かります。 よろしくお願いします。

  • MATLABのGUIDEでフォルダ内の画像ファイルを表示する方法。

    MATLABのGUIDEでフォルダ内の画像ファイルを表示する方法。 MATLABのGUIDE内であらかじめボタンやパネルなどを配置するときに 背景色の変更のように背景に画像を設定することはできないのでしょうか? できなければmファイル内でのプログラミングでもいいので 画像ファイルを読み込んでGUIで背景表示させる方法を教えてください。

  • MATLAB error (mat2gray)

     私のパソコン(WindowsXP)には、MATLAB(Ver5.2)が入っています。しかし、今までMATLABを使ったことはほとんどなく、これから勉強していくつもりでいます。    あるインターネットサイトからあるバイナリデータをタウンロードしMATLABで読み込もうとしています。そのサイトには、読み込むためのサンプルプログラム(mファイル)も紹介されています。しかし、そのサンプルプロクラムで読もうとすると、  "Undefined function or variable 'mat2gray'." というエラー出ます。おそらくmat2grayという関数か変数が必要であるということだと思いますが、私はどうすればいいか全く分かりません。教えてください。

  • MATLABのプログラミングについてご質問です

    MATLAB初心者です。 現在、以下の環境を使っています。 ------------------------------- OS:Windows XP MATLABのバージョン:R2007a ------------------------------- 以下の内容をプログラムでどう組み込めばよいのか分らないため、質問させて頂きました。 詳しい方、ご教授のほどお願いします。 (1)Windowsのペイントで、ドラッグ&ドロップすると    +----------+    |         |    +----------+  このように、点線で枠ができると思います。それをMATLABで表現する方法  (始点座標と終点座標はマウスで操作するため、座標は可変になります) (2)MATLAB-GUIに画像データ(sample.tif)を表示する方法 (3)MATLAB-GUIを表示した時に、表示位置を常にパソコンのモニター中央にする方法 (4)MATLAB-GUIで画面A, Bとある場合、画面Aの[次へ]ボタンを押すと画面Aを消して画面Bを表示する方法 長くて申し訳ございませんが、ご回答よろしくお願いします。

  • Unity 新GUIのSlideから変数取得.js

    Unityの新GUI(UI,uGUI)のSliderから数値を取得してスクリプト内の変数に代入するという javascriptを書きたいのですが、全くわかりません。 インターネットを使って調べてみたのですが、C#のものしか見つからず (自分は)C#は使えないので、javascriptで教えて下さい。 //C#例 float red = this.redslider.GetComponent<Slider> ().value; のようなことをjavascriptでしたいです。 C#で書いてあったサイト↓ http://www.rising-app.com/2014/12/24/unity-4-6-ugui-2/ http://hwks.hatenadiary.jp/entry/2014/12/15/012655

  • MATLABでテキストに書き出す時1.00e+2を100にする方法

    MATLABで計算したデータを save ファイル名 変数名 -ascii で書き出そうとしたのですが できたファイルの中身がe+を使った表示になってしまいます。 具体的には'341'が'3.4100000e+2'のように表示されてしまいます これを'341'とファイルに出力時に表示させるにはどうすれば良いのでしょうか?知っている方がいたら教えてください!

  • MATLABのGUI作成についての質問です。

    貼り付けた画像のようなGUIをつくりたいです。 どなたかおわかりになる方がおられたらご教授ねがいます。 プッシュボタンを押すとaxes1に F=<64×64 double> の行列を呼び出して imagescを使ってその数値をaxes1にカラーとして表示させ、 axes1上でマウスをクリックすると、その座標を2つのエディットテキストに 出力するようなGUIをつくりたいです。 プッシュボタンのコールバックに データ(行列F)の呼び出しとimagesc(F)によるaxes1への図の表示を定義しています。 axes1に図を表示させるところまではできたのですが、 マウスでクリックした点の座標をエディットテキストに出力することができません。 http://www.mathworks.co.jp/support/solutions/ja/data/1-AGU7P7/index... を参考にしてfigureのWindowButtonDownFcnのコールバックを定義すればいいのかと思いましたが、 「.fig」を保存して作成して作った「.m」ファイルのプログラムのどこにも figureのWindowButtonDownFcnを定義するところが見当たりません。 マウスでクリックした点の座標の値を取得してエディットテキストに出力するには どのようにしたらよいのでしょうか?

  • MATLABのDICOM画像表示

    いつもお世話になっております。 現在、MATLABでDICOM画像を扱って画像処理を行おうとしているのですが、MATLABでDICOM画像(unit16)を表示 A = dicomread('ファイル名.dcm'); imshow(A,[]); させた画像がImageJやDICOMviewerで表示させた画像と比べて暗く(階調数が多く)感じられ、原画像を表示することができません。 unit16に問題があると思い、unit8に変換しましたが、画像は暗い画像で、かつ、同じピクセル値に線が入った画像となってしまいました。 どうすれば原画像を表示させることができるのでしょうか? アドバイスよろしくお願いします。

  • アプレットとGUIアプリケーションで画像の表示方法は違う?

    画像ファイルをGUIアプリケーションで表示させようとしているのですが、今までアプレットでは表示させていたことはあったのですが、それより手順がちょっと違うようで(?)混乱しています。 アプレットでは、getImageとdrawImageでなんとなく出来てしまったのですが、GUIアプリケーションではいったんコンポーネント(今読んでいる資料ではJLabel)に置いてそのコンポーネントを、コンテナに置く、という手順を踏んでいるのですが、この手順はGUIアプリケーションだからこうする必要があって、こういう手順にしているのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java