2012-07-31 114 views
0

我保存和加載GUI數據如使用存儲失敗

function readImage(filename, hObject, handles) 
    handles.image.data = imageRGBNoEdge; 
    guidata(hObject,handles); 

function createHistogram(handles) 
    imageRGB = handles.image.data; 

它們都其它

readImage(imageFile,hObject,handles); 
createHistogram(handles); 

後直接調用的手冊中所描述然而在他第二個功能handles.image是未知的。

??? Reference to non-existent field 'image'. 
Error in ==> ui_histogram>createHistogram at 252 
imageRGB = handles.image.data; 

但是如果我第二次調用函數,它是已知的嗎?

回答

1

儘管有它的名字,句柄是一個結構而不是句柄類,所以在readImage中更改它並不會將更改傳播到調用函數。

你可以要麼改變readImage是

function handles = readImage(filename, hObject, handles) 

handles = readImage(imageFile,hObject,handles); 

調用或添加呼叫只是你calll到createHistogram之前guidata

handles = guidata(hObject); 

+0

我剛剛寫下相同的答案。我可以證實這是有效的。 – 2012-07-31 12:30:28

0

我在假設imageRGBNoEdge已被定義在這一點。

通過簡單查看guidata函數文檔,它看起來可能是這裏的問題的一部分。當您嘗試內createHistogram加載數據,你需要使用這樣的事:imageRGB = guidata(hObject)因爲這是告訴guidata什麼樣的數據,以便爲您和您已經保存的數據到該對象的句柄(hObject

此外,我不能評論更多,因爲它看起來每個功能都有一些缺失的代碼。希望這會幫助你朝着正確的方向前進!

+0

'imageRGB = guidata(hObject)'沒有多大意義。問題在於handle對象保存在第一個使用'guidata(hObject,handles)'的函數中,但調用函數中的'handles'變量是一個局部變量,並且不知道它已經改變。因此,必須在調用函數中更新句柄,如以下博客文章所示:http://www.matlabtips.com/handle-the-handles-in-guidata/ – 2012-07-31 12:27:24

+0

好的,如果您保留'guidata(hObject,句柄)''調用'數據'事實上就是'句柄'。但是,如果將其更改爲'guidata(hObject,imageRGBNoEdge)'並將'hObject'傳遞給'createHistogram',那麼在調用'guidata(hObject)'後應該很好地處理已有數據。 – 2012-07-31 12:36:22