14 2 3 設計主應用程式

2021-08-26 11:44:49 字數 1552 閱讀 4081

14.2.3 設計主應用程式

到目前為止,我們只建立了顏色濾鏡,但我們想要我們最終的應用程式,可以處理更一般的圖形效果。顏色濾鏡,比如,灰階或亮度,把乙個函式應用到每個畫素,僅基於該畫素的值。其他的效果可能更一般,可以用影象做任何事情,比如,幾何變換或模糊。我們在後面將以模糊為例,只是為了說明它的可能性。當我們生成應用程式時,要考慮到這一目標。

這個應用程式允許我們開啟乙個影象檔案,從列表中選擇乙個效果,將其應用到這個影象上。我們將為每個效果建立順序和並行版本,以便可以測量效能。執行效果後,應用程式自動顯示應用效果要花多長時間。圖 14.2 顯示最終應用程式的螢幕截圖。

圖 14.2 完成的影象處理應用程式,對樣本影象首先執行灰度,然後再變亮濾鏡

在 c# 中,我們可以用 windows 窗體設計器,建立應用程式的使用者介面。應用程式使用 toolstrip 控制項,建立有必要的命令的工具欄,並使用 toolstripcombobox 控制項建立可用的效果列表。打包在 tabcontrol 的 picturebox 控制項顯示影象,所以,我們可以方便地在原始影象和處理過的版本之間切換。

一旦我們在設計器中建立圖形使用者介面以後,就可以使用已經實現的濾鏡。正如我們剛才所說的,應用程式有足夠的靈活性,處理一般效果遠超過剛才的濾鏡,所以,讓我們來看看如何在**中表示想要的這些效果。

建立 f# 中的 windows 應用程式

不幸的是,在 visual studio 中支援的 f# 不包含 windows 窗體設計器。我們已經看到,在 f# 中,手動建立簡單的 圖形使用者介面,還是容易的,但是,對於這種型別的應用程式,能有乙個設計器是有益的。幸運的是,f# 可以方便地引用 c# 庫,反之亦然,所以,我們有幾個選項可用。

在 c# 中實現使用者互動,引用 f# 庫,包含所有資料處理的**,這是另一種方法。如果我們想要使用這種方法,需要在 f# 物件型別中,打包圖形效果(如第 9 章中所述),把 f# **編譯成庫。c# 應用程式然後使用這個庫中的型別,以執行圖形效果。

引用效果

顏色濾鏡是乙個函式,取一種顏色,並返回新的顏色。效果也是函式;然而,引數和結果的型別不同。效果可以處理整個影象,因此,它需要取整個影象作為輸入。在 c# 的圖形使用者介面應用程式中,我們還需要儲存效果的名字。後面,當我們講座如何並行化處理過程時,需要給效果的並行版本,新增乙個單獨的專案。清單 14.13 顯示打包到 effectinfo 型別的所有這些資訊。

listing 14.13 representation of graphical effect (c#)

class effectinfo

public string name

}這個類很簡單,只有兩個屬性。我們已經可能以最簡單的方法建立,有可變屬的屬性。我們只會在圖形使用者介面內使用這種型別,因此,可能會讓我們感覺有點不舒服,但也不用太擔心。這個類的第乙個屬性是執行效果的函式,第二個屬性是乙個名字。這是類似於 f# 記錄,包含乙個函式和乙個字串;這就是我們將在這個應用程式的 f# 版本中使用的設計。接下來,我們要討論如何可以建立 effectinfo 例項,來表示我們以前實現的顏色濾鏡。

qt應用程式主視窗

qmainwindow視窗可以包含選單欄 工具欄 狀態列 標題欄等,是最常見的視窗形式,可以作為gui程式的主視窗 1 設定選單 setmenubar方法 標頭檔案 qmenubar 2 設定工具欄 add 方法 標頭檔案 q 3 設定可停靠部件 adddockwidget qmainwindow的...

應用程式許可權設計

我們在開發系統的時候,經常會遇到系統需要許可權控制,而許可權的控制程度不同有不同的設計方案。1.基於角色的許可權設計 這種方案是最常見也是比較簡單的方案,不過通常有這種設計已經夠了,所以微軟就設計出這種方案的通用做法,這種方案對於每乙個操作不做控制,只是在程式中根據角色對是否具有操作的許可權進行控制...

應用程式許可權設計

我們在開發系統的時候,經常會遇到系統需要許可權控制,而許可權的控制程度不同有不同的設計方案。1.基於角色的許可權設計 這種方案是最常見也是比較簡單的方案,不過通常有這種設計已經夠了,所以微軟就設計出這種方案的通用做法,這種方案對於每乙個操作不做控制,只是在程式中根據角色對是否具有操作的許可權進行控制...