2018年3月21日 星期三

直接使用 AVIUTL 縮小影片

雖然現在攝影設備(DV/DC/CAM....)都可以輕鬆拍出 Full HD 的影片,但是問題是 FHD ( Full HD 簡稱) 或 4K 影片檔案大到令人咋舌,動輒以 GB 起跳的檔案,在網路上傳送,簡直就是噩夢一般。

所以,在不影響閱聽者的觀賞情況下,適當的縮小影片是一個很重要的事情。

這裡使用個人常用的影片編輯軟體 AVIUTL 來快速處理影片,這裡以大將常見的 MP4 檔案來進行說明。

首先,檢查影片大小,其實 Windows 的 檔案總管 對於 MP4 算是比就友善的,可以在檔案總管內看到原始影片解析度。


就解析度來說 FHD 是 1920 x 1080,而 HD 則是 1280 x 720

一般HD的畫質在觀看上其實是都可以接受的,所以我們就以 HD 畫質為目標來處理。

首先開啟 Aviutl,可以看到上下兩個視窗,上面是預覽畫面,下面則是軌道編輯。



簡單易用的免費空間 ZippyShare


網址:http://www.zippyshare.com
上傳檔案限制:500MB
下載限制:無
檔案存留時間:沒有檔案下載活動後30天自動砍檔

2018/03

【上傳方式】

直接到ZippyShare首頁,可以看到『Browse』,按下『Browse』來選擇你要上傳的檔案



2018年3月8日 星期四

powerbuilder的TrackBar和ScrollBar對於滑鼠滾輪的處理

powerbuilder 的 TrackBar (vTrackbar / hTrackBar) 與 ScrollBar (vScrollbar / hScrollbar) 的控制上一直以來都少了一根筋,那就是 Mouse Wheel 滑鼠滾輪的事件。

雖然,Trackbar/Scrollbar 在使用時,滑鼠滾輪都可以控制標桿的移動,但是因為沒有對應的事件與通知,所以沒辦法處理滾輪滾動之後的定位值

你可以在 Trackbar/Scrollbar 找到下面事件

moved - 標桿移動後的觸發,但是只限於使用滑鼠按住標桿的移動才會發生。
pageup/pagedown - 當使用滑鼠點擊標桿 兩側 時,標竿會移動一個距離的事件。
lineup/linedown - 當使用鍵盤方向鍵(Arrow Key)控制標桿移動時,會觸發的事件。

但就缺少滑鼠滾輪事件!

此時就可以利用攔截 Windows Message ID 方式處理:

滑鼠滾輪事件 WM_MOUSEWHEEL = 522
此事件會帶 Word 參數 → 0 =向下滾動、1=向上滾動

在 Trackbar/Scrollbar 裡面有個 Other Event,在裡面下判斷,即可以處理


if message.number = 522 then
if message.wordparm < 0 then
//mouse wheel down
st_pos.text = string(vtb_1.position)
else
//mouse wheel up
st_pos.text = string(vtb_1.position)
end if
end if

那如果要防止使用者使用滑鼠滾動(禁用),就可以在事件返迴 1 ,以防止事件執行:


if message.number = 522 then
return 1
end if

相對的這個在 DataWindow Control 物件上也適用喔!




2018年2月22日 星期四

[軟體] 會場音樂播放器 arena music player

這是為了公司春酒/尾牙使用的音樂播放軟體,用 Powerbuilder 10 開發,使用多部筆記型電腦撥放,搭配我自己自製的混音器使用。



這個播放器可以預載 16 軌音樂,與 8 組音效,基本春酒/尾牙流程是足夠了,不過不含影片的播放,因為雖然可以開發MCI Video Player,但是我一直處理不好字幕檔的問題,所以播放軟體我就改成使用 potPlayer 來處理。而這支程式純粹是用來播放多軌音樂的

這播放器的好處是不需要在資料夾內一個一個點擊開啟音樂,然後又要關閉播放器的問題。
每一軌音樂都可以暫停,然後再播放其它音樂,當另一個音樂流程結束,再繼續原本的音樂。


本程式由 PB 10 開發,如果你沒有安裝過 PB10 的 Runtime,需先安裝下面 Runtime 包
http://www79.zippyshare.com/v/XShRuj7v/file.html

(載點失效請留言給我,我再重新上傳 ※URL會變更)

要注意幾點:

2018年2月9日 星期五

powerbuilder send message control

Powerbuilder 對於視窗形物件的控制比起 C/C++/C#/VB 等開發工具弱勢多了。

但是,Powerbuilder 提供了 Send 函數來彌補對視窗物件的一些細微控制。
其實,它是源自於 Windows 本身對於標準 Windows 物件的控制,它是使用了 Message ID 方式通知物件進形事件動作,而 Powerbuilder 只是順便利用了這個設計而已。

例如:ListView 為人詬病的就是缺了 Scroll 的控制,在資料量大時,一定會超過一個畫面的資料,會跑到畫面之外,此時你只能用滑鼠去 Scroll 或是用滑鼠操作 Scroll bar ,沒有辦法用 Programming 方式控制。

此時,就可以利用 Windows Message 方式發送控制資訊給 Windows物件 來控制:


//捲動功能,可適用在ListView、DataWindow、MulitiLine Editor上
//上捲一行
Send(Handle(lv_mylist), 277, 0, 0)
//上捲一頁
Send(Handle(lv_mylist), 277, 2, 0)
//下捲一行
Send(Handle(lv_mylist), 277, 1, 0)
//下捲一頁
Send(Handle(lv_mylist), 277, 3, 0)

//像是下面兩種方式都可觸發按鈕Click事件
Send(Handle(Parent), 273, 0, Handle(cb_OK))
cb_OK.TriggerEvent(Clicked!)

//最小化 DataWindow
Send(Handle(dw_whatever), 274, 61472, 0)
//最大化 DataWindow
Send(Handle(dw_whatever), 274, 61488, 0)
//一般大小 DataWindow
Send(Handle(dw_whatever), 274, 61728, 0)



2018年1月23日 星期二

Xamarin : Android 取得媒體儲存裝置 retrieve emulated or removable storage path

這是一個很觀念的問題,其實android對於儲存位置的概念跟Windows是不一樣的。

我們所知的 Windows 的儲存媒體,通常都會是以『磁碟機』(Device)概念呈現的,每個 Device 都會被賦予一個『磁碟機代號』(Device Letter),像是 『C:\』『 D:\』 等等。

但是除了 Windows 以外的世界,基本上會是用『路徑』來呈現,由其 Android 的 Dalvik 系統本身就是 java 的支線,所以儲存空間會像是 『/Storage/dev0』『/Storage/dev1』之類的呈現法。

瞭解了以上的概念之後,再來瞭解 Android 對於儲存空間的認定。

一般我們在看儲存位置的時候,直覺上會把手機的儲存空間分為『內建』『內部』『外部』『擴充』等等的用法,因為 Android 有分為內建記憶空間和一個可以擴充的 SD 卡(或是TF卡)。

而我們程式在開發時相關文件都會去 Google 找類似 Internal 或是 External 類的單字搜尋,但實際上找到的文件範例基本上都會牛頭不對馬嘴,最大的原因應該會出在 Android 開發團隊對於這種一般人認定的常規式用法式有很大出入的。

Android 對於內建記憶空間和擴充的SD卡認定如下:

Emulated - 內部記憶空間,用的單字是『仿真』,而不是 Internal (內部),是因為 Android 真正內部記憶體指的是ROM,也就是作業系統OS存在的地方,而ROM本身不能經常寫入,因為有寫入壽命限制,但是作為一個作業系統難免會有許多設定或變更或紀錄,那這樣要存在哪裡呢?事實上, Android 手機真正可以讀寫的內建空間其實也是一個 SD 卡,指是手機製造商會在手機裡面直接燒上SD的儲存晶片作為內建儲存空間,凡是OS以外的程式APP或是紀錄都會存在此處,所以把這種內建 SD 記憶體稱為『仿真記憶體』。

Removable - 擴充的記憶體(SD卡或TF卡),這被稱為『可移除式』媒體,名字簡而易瞭,代表這記憶體可以被移除或是安插。

External - 而這個『外部』的意思就是泛指除了 OS 的 ROM 之外的都會稱為 External,所以上面兩個『Emulated』、『Removable』都算在 External 下面。而 External 下只有一個 storages,從這個 storages 下才會開始區分各類儲存空間。

所以記憶體歸類會像下面結構:


先看看程式樣本,再來解說:

2018年1月11日 星期四

Xamarin : Android : FilePicker 檔案瀏覽

其實這是用來搞懂 這一篇 Browse Files - Xamarin
範例則來自 GitHub 的 mgmclemore 收集的 A collection of Xamarin.Android sample projects

由於 android 瀏覽檔案時沒有像 Windows 一般有『現成』的檔案瀏覽介面(SHELL)可以使用,所以就非常麻煩的必須自己去作出像檔案瀏覽器一樣的介面。

而且 Xamarin 開發的介面中也沒有可以直接使用的元件,所以這完全必須依賴外部套件才有辦法作出來。
這個套件引用了 Xamarin.Android.Support.v4 這個套件,所以必須先到NuGet去下載這個套件到專案內。