看板 MATLAB 關於我們 聯絡資訊
在畫圖時 figure的menu上 有可以zoom in zoom out 的兩個按鈕 可以放大和縮小圖 比方說我zoom in了兩次 我該如何讓程式知道我目前的圖已經zoom了多少次了嗎? 我的問題是發生在 我想在一張figure上 在滑鼠點擊的位置畫出一個紅色點 並且可以配合zoom in使用 程式碼如下 f=figure(1) ; imshow('cell.tif') ; set(f,'windowbuttondownfcn',[' ;' ... 'imshow(''cell.tif'') ;' ... 'hold on ;' ... 'CurrentPt=get(gca,''CurrentPoint'') ;' ... 'plot(CurrentPt(1,1),CurrentPt(1,2),''ro'') ;' ... 'hold off;']) ; 可是每次zoom in完 點擊下一個點後 圖片又會zoom out回原始大小 不知道有沒法可以克服 只要能得到zoom了幾次的值 或許可以利用zoom(Factor)來設定 --
okgogogo:set第二行imshow去掉 05/04 23:21
okgogogo:想知道zoom情況,自己寫個UI按鈕 可參考help camva 範例 05/04 23:24
diva:imshow不能去掉 理由是 我希望圖上只能有一個紅圈 05/05 19:59
diva:如果imshow去掉 又hold on 則紅圈會隨著滑鼠點擊越來越多 05/05 20:00
diva:如果imshow保留 hold off 則只有紅圈 而無底圖 05/05 20:00
diva:camva剛試過並不合用 理由是 camva會把axes的框整個放大縮小 05/05 20:01
diva:和zoom的只放大縮小圖片 而axes大小不變 有差異 05/05 20:02
diva:還是謝謝你的回答 05/05 20:02
我後來自己把問題解決了一半 把程式加上2行就可以了 f=figure(1) ; imshow('cell.tif') ; set(f,'windowbuttondownfcn',[' ;' ... 'zoom reset ;' ... 'imshow(''cell.tif'') ;' ... 'zoom out ;' ... 'hold on ;' ... 'CurrentPt=get(gca,''CurrentPoint'') ;' ... 'plot(CurrentPt(1,1),CurrentPt(1,2),''ro'') ;' ... 'hold off;']) ; zoom reset 設定目前zoom的狀態為起始狀態 zoom out 返回zoom的原始狀態 但是還是有一個問題 這麼做的話 點選figure上的zoom out按鈕 就沒辦法恢復成圖片的原始大小了 不知道有沒有辦法可以解決 ※ 編輯: diva 來自: 140.112.103.220 (05/05 20:14)
okgogogo:只有一個紅點,不應該重新plot應該用set改變 05/05 20:50
okgogogo:我的程式plot只會出現第一次,之後都用set, 05/05 20:50
okgogogo:你一用它內建繪圖指令,屬性都會被改變像bar指令 05/05 20:51
okgogogo:你圖應該也只是載入一次,其他是改變軸之類的... 05/05 20:52
的確 如你所說 set可以解決zoom的問題 感謝!! 另外想請問一下 你提到應該用set而不是重畫 請問用set有什麼好處嗎? 因為set和重畫比起來 程式量好像差不多 針對我原來的寫法 我也找到解決的方法了 f=figure(1) ; imshow('cell.tif') ; set(f,'windowbuttondownfcn',[' ;' ... ' ;' ... ' ;' ... 'XLim=get(gca,''XLim'') ;' ... 'XTick=get(gca,''XTick'') ;' ... 'XTickLabel=get(gca,''XTickLabel'') ;' ... 'YLim=get(gca,''YLim'') ;' ... 'YTick=get(gca,''YTick'') ;' ... 'YTickLabel=get(gca,''YTickLabel'') ;' ... ' ;' ... 'imshow(''cell.tif'') ;' ... ' ;' ... ' ;' ... 'set(gca,''XLim'',XLim) ;' ... 'set(gca,''XTick'',XTick) ;' ... 'set(gca,''XTickLabel'',XTickLabel) ;' ... 'set(gca,''YLim'',YLim) ;' ... 'set(gca,''YTick'',YTick) ;' ... 'set(gca,''YTickLabel'',YTickLabel) ;' ... ' ;' ... 'hold on ;' ... 'CurrentPt=get(gca,''CurrentPoint'') ;' ... 'plot(CurrentPt(1,1),CurrentPt(1,2),''ro'') ;' ... 'hold off;']) ; ※ 編輯: diva 來自: 140.112.103.220 (05/05 22:29) ※ 編輯: diva 來自: 140.112.103.220 (05/05 22:30)