Monthly Archives: 九月 2009

[Net] WinForm 中 PictureBox 的圖層


先畫一張簡圖如下:
紅框線代表 PictureBox ,藍框線代表 PictureBox.Image ,黃色底圖代表 Image 已經載入某個圖形,例如用 Image.FromFile。
.Net 的繪圖系統是包裝 GDI+ (gdiplus.dll) ,所以很多部分跟原始的 GDI 有點格格不入。平常寫程式時,還沒感覺,大部分配合 Paint 事件處理,不然就是輸出成圖檔,再指給 PictureBox.Image ,讓自動重繪來處理螢幕更新顯示的問題。
當碰上實做小畫家要做不規則範圍的填色 (API: ExtFloodFill) 或是使用 Graphics.DrawImage 沒提供的 BitBlt 來做疊圖的互斥運算時,會發現糗大了,因為畫的東西跟原來的圖疊不在一起。
GDI 系列的 API 需用 hDC 才能繪圖,但是 g.GetHdc 的圖層並非是直接在圖上 (RowData 層) ,所以 GetPixel(hDC, x, y) 根本沒意義,因此:
Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
Dim hDC As IntPtr = g.GetHdc
得到的是上面黑色的圖層。
使用 Graphics.DrawXXXX 方法,會直接畫到 RowData 圖層,所以平常也感覺不出來,但若對 hDC 層有任何更動後,要嘛就是直接覆蓋掉 RowData ,要嘛就是被忽略。
若改用 PictureBox 的方法:
Dim g As Graphics = PictureBox1.CreateGraphics
Dim hDC As IntPtr = g.GetHdc
這層基本上跟 Paint 同層,也就是說若不在 Paint 中來畫,隨便一個動作後,就會自己被清掉了。此外這個圖層是把螢幕上該位置的圖切出來,也就是說,若是 PictureBox 不顯示,或是前面還有其他視窗,就會被其他視窗干擾,造成圖片的內容不正確。
所以在 .Net 中,直接呼叫 GDI 函數,其實還好,只要 Image 的 RowData 是空的,就可以直接覆蓋,但是若是要對既有的圖片編修,使用 Graphics.DrawXXXX 還算簡單,要用 GDI 函數處理時,就千難萬難。
這邊有兩個範例:
函數 FloodFill 在封閉區域填色
函數 PaintImage 呼叫 API BitBlt 將兩張圖疊繪在一起
由於 Image 是屬於無介面類別,所以繞路走的方向就是把記憶體中的 Bitmap 畫到 DC 上,此時再對 hDC 作業,處理完畢後,將此 DC 轉回成 .Net 內建的 Bitmap 類別,最後取代原先的 Image ,完成 hDC 的操作。
Categories: 技術分享 | 發表留言

芭瑪颱風與米勒颱風不知會否發生共伴效應


這應該是昨天晚上發布的了,昨天跑去高雄,回來晚了,就沒看 eMail ,早上起來看 eMail ,收到最新的資料如下。
在芭瑪颱風與米勒颱風剛好中間的位置,還有個熱帶性低氣壓,圖上看不出來,這個熱帶性低氣壓被兩個颱風夾住,相距各 1,000 公里左右,不知道會不會被吃掉,還是會發展成颱風…
兩個颱風與一個熱帶性低氣壓都是往台灣近海方向,算是滿熱鬧的,等到中午過後收到新資料再來看看~ 到時新圖再補上來。
 
 
[9/30 14:15 補]
 
[10/1 1:32 補]
 
[10/2 01:13 補]
 
[10/2 13:14 補]
 
[10/3 01:16 補]
 
[10/3 16:52 補] 中午出門吃飯逛逛,剛回來,右迴旋阿~
 
[10/4 01:12 補]
 
[10/5 01:12 補] 可以看到路徑與上面迥異,這也是個怪颱,最慘的是預報連續五天都打算在菲律賓混… 這是天要滅國嗎?
 
[10/5 13:32 補]
Categories: 決策支援系統 | 發表留言

[閃光開箱文] 微軟線上商店的禮品


話說,MVP Team 因為各國海關很龜毛 (包含 NCC),無線設備進關一堆報關手續,甚至到退件的情形,所以決定自明年起,不再提供線上商店的禮品,所以這是我最後一次寫微軟線上商店的開箱文了,以後沒有了~
我在 9/23 半夜到 9/24 凌晨跟老婆一起選,考慮到 NCC ,我只選了兩支 NB 用的藍芽鼠,9/25 微軟線上商店通知出貨,今天早上已經收到,不過 UPS 的 eMail 滿白爛的,我從 9/26 開始訂閱狀態變更通知信,第一封很完整,中間都沒有通知,今天早上送到後,發來的通知信中間的歷程全部不見,大概是認為寄到了,歷程就不重要了。不過這次居然進關 NCC 居然完全沒擋,也沒要求我報關,跟去年完全不一樣~
去年在桃園機場就躺了一周,等向 NCC 報關結果,相關報關資料詳見前篇所提的聯結。
開箱啦~
箱子是娟娟開的,東西都拿出來的,最下方有個怪東西,老婆問我說這是不是墊底用的,想一想跟娟娟說,以前沒這個慣例,不然拆開來看看好了。

挖哩勒,居然藏了一個馬克杯…

都拆出來了,大家排排隊來照相~ 左半邊是 5 個水壺水杯,下方是文具跟狗牌的伸縮環,拿最夯的 Win7 ~

右半邊兩隻滑鼠、一個馬克杯、一個鏡子,再加一個靜電玩具,打算給小朋友玩

我先在正常光下玩看看~

拉上窗簾在黑暗中玩看看~

解除一層窗簾~

Categories: 嗜好 | 發表留言

新鏡框~


最近不知道運勢怎樣,東西一直壞,先是冷氣嘎嘎叫,之後 AIWA 音響掛、DVD Player 掛買新的、娟娟手機掛送修、22″ LCD 掛送修、姐姐手機掛送修,今天終於輪到我了…
洗完澡拿眼鏡一戴,耳掛掉下來~ 趕快趁眼鏡行沒關門前送去修,沒想到是螺絲斷成兩截,斷在裡面的螺絲尾巴拆不下來,只好換付跟原先鏡片相容的新鏡框,老闆說我才知道我原先的鏡框是名牌,Nikon 。
 
新鏡框是 ORIENT 鈦合金鏡架,比原先的輕。
 
Categories: 健康 | 發表留言

[VSNET] 推薦 安裝條件工具 Bootstrapper Manifest Generator


Bootstrapper Manifest Generator http://code.msdn.microsoft.com/bmg

有需要在自己開發環境自建安裝程式用的必要條件,可安裝此工具,有 VS2005/2008 兩種版本,基本上只需要一個人建,建好後拷貝到指定目錄就可以在 封裝專案 屬性 必要條件 中選擇。

VS2008 目錄:C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages

線上手冊中有四個工作範例可以參考。不過設定項目滿多的,大概要慢慢試。

Categories: 電腦和網際網路, 封裝部署 | 3 則迴響

[VSNET] 推薦超級好物 – Windows® API Code Pack for Microsoft® .NET Framework


Windows® API Code Pack for Microsoft® .NET Framework http://code.msdn.microsoft.com/WindowsAPICodePack

話說 VB Insiders 發的信太多,有時實在懶得看,剛好今天 VB Insiders 那邊耍白爛,把大家踢出去又重新加入,在看相關訊息時,不小心看到這個。

大部分 .Net 類別本來就是包裝 Windows API ,所以其實也不稀奇,但是這次附一堆原始碼與範例,趕快抓下來~

早期 VB Power Pack 也是類似如此,有把一些程式碼範例放出來,最後形成一個完整的工具。目前這個 Windows API Code Pack 是只有原始碼、範例和線上手冊,並沒有已編譯好的類別庫,所以使用上需要自行編譯,有好也有壞,自己編譯可以只抽自己要的部分,可以節省空間,但是不明究裡的可能會把這個類別搞混,可能到 2.0 以後就會像 Power Pack 一樣,有官方版本,並且在安裝必要條件可勾選吧…

重點在於整個類別庫原始碼公開,不抓下來參考實在對不起自己~ 類別庫的原始碼為 C# ,範例原始碼包含 VB / C# / VC ,線上手冊分兩個檔,DirectX 的特別分出來,其他雜項在裡面。

裡面大概有:

1. DirectX : DXGI 1.0 / 1.1、Direct3D 11.0/10.1/10.0、Direct2D 1.0、DirectWrite、Windows Imaging Component (WIC) 大部分的 API ,光是 Direct3D 大概就哈死人吧?

2. WinAPI : Windows 7 TaskBar 及一些程式庫、Shell、Explorer Browser Control、custom Common controls、Sensor Platform、Extended Linguistic Services、Power Management、Application Restart and Recovery、Network List Manager、Icon。

稍後跑幾個範例,把圖附上來。


NetworkDemo

ExplorerBrowserDemo 這個檔案總管的範例大概很多人會喜歡

 
PowerManager 電源管理
 
CommonDialogSearch 公用搜尋對話盒
 
CommonDialogFolder 公用選擇目錄對話盒
 
KnowFloderBrowser
 
SearchApp (WPF)
 
ShellHierarchy
 
還有很多範例懶的截圖了~
Categories: 電腦和網際網路 | 1 則迴響

[閃光文] Wii 有免費的網頁瀏覽器了


剛剛小女兒在玩 Wii ,玩完後要關機前,說:「吧吧~ 有更新耶~」
我:那你就更新吧~
 
一會我檢查了一下,多出了一個新功能,點進去居然是網頁瀏覽器~
 
先拿來看水利系版:
 
之後用 YouTube 看少女時代 9/10 勞軍演唱會:
 
照完像片看設定頁才知道,工具列可像 Windows 開始工具列 自動隱藏,這樣畫面就可以變大了~
 
噗浪貼文:
 
 
補充:
首先你要接網路,Wii 主體內建 802.11g 的無線網路,所以記得要設定好。
之後在 Wii 免費下載網頁瀏覽器後,會有個圖形如下,點進去:
 
接下來進入大畫面,右下角點進去就可以用了:
 
Categories: 娛樂 | 4 則迴響

[作業級]交替區塊法求設計雨型


弄了個解作業的網頁,裡面有範例題目,對一般非水利的人大概沒啥作用,水利的可以玩看看…

設計雨型  http://www.hisdt.com/Tools/Hydrology/Hyetograph.htm

第一次試用的時候,直接按下 雨量組體計算 按鈕,會解範例,依照範例格式修改文字框,就可以算其他的案例。

這是用降雨強度公式來求不同延時的設計雨型,降雨強度公式 I(t) 記住使用 t 為變量,範例採分為單位,省去單位換算的問題,要求兩日或三日設計雨型時,就用 2,880 分或 4,320 分取代。
Categories: 決策支援系統 | 發表留言

[OWC] 雙 Y 軸的小範例


請開新的網頁,貼入下列網址,這是要配合的網頁:
 
首先點上方範例網頁中的繪圖按鈕,這是一個示範 3 個 Chart 的同時繪製,股票圖也常會這樣畫,所以雖然有 3 個 Y 軸,但是各自有各自的 Y 軸。
本篇的範例是將這張圖的中間水庫水位與下方水庫進水量合併成 1 個 Chart,所以一張圖內會需要兩個 Y 軸,將下方的範例文字貼入文字盒,按下繪圖,即可展示合併後的結果。
 
說明主要的程式碼片段:
For i = 3 To 4 : arrSeries(i).UnGroup True : Next ‘ 將最後兩條線解除群組放到新座標系統
For i = 4 To 4 : arrSeries(3).Group arrSeries(i) : Next ‘ 將最後兩條線組成一個新群組
Set newY = .Axes.Add(arrSeries(3).Scalings(chConst.chDimYValues)) ‘ 依最後兩條線群組建立一個新 Y 軸
newY.Position = chConst.chAxisPositionRight ‘ 將新 Y 軸放到圖的右邊
Set newXScaling = arrSeries(3).Scalings(chConst.chDimXValues) ‘ 設定 X 軸繪圖範圍與原 X 軸相同
 

[MultiChart_Config]
‘ 項目=名稱,寬,高
Item1=運轉, 100%, 25%
 
[MultiChart_SetObject]
.ChartLayout = chConst.chChartLayoutVertical
.ChartWrapCount = 1
.HasChartSpaceLegend = True
.Charts(0).HeightRatio = 100
 
[運轉_Config]
GraphType=XY
YAxisTitle=流量 (cms)
 
[運轉_Data]
觀測進水量=37150.3333333333, 37150.375, 37150.4166666667, 37150.4583333333, 37150.5, 37150.5416666667, 37150.5833333333, 37150.625, 37150.6666666667, 37150.7083333333, 37150.75, 37150.7916666667, 37150.8333333333, 37150.875, 37150.9166666667, 37150.9583333333, 37151, 37151.0416666667, 37151.0833333333, 37151.125, 37151.1666666667, 37151.2083333333, 37151.25, 37151.2916666667, 37151.3333333333, 37151.375, 37151.4166666667, 37151.4583333333, 37151.5, 37151.5416666667, 37151.5833333333, 37151.625, 37151.6666666667, 37151.7083333333, 37151.75, 37151.7916666667, 37151.8333333333, 37151.875, 37151.9166666667, 37151.9583333333, 37152, 37152.0416666667, 37152.0833333333, 37152.125, 37152.1666666667, 37152.2083333333, 37152.25, 37152.2916666667, 37152.3333333333, 37152.375
觀測進水量=50, 0, 50, 12.78, 10, 60, 50, 0.01, 62.78, 10, 10, 10, 12.78, 60, 60, 10, 12.78, 60, 47.78, 62.78, 62.78, 112.78, 162.78, 210, 334.56, 415.56, 810, 832.78, 800, 752.78, 752.78, 1641.67, 2091.67, 1839.44, 1797.22, 1450.44, 1050, 900, 950, 1544.44, 3352.78, 3421.78, 3325, 2308.11, 1550, 1752.78, 2663.89, 2151.56, 1407.22, 1656.78
預測進水量=37152.375, 37152.4166666667, 37152.4583333333, 37152.5, 37152.5416666667, 37152.5833333333, 37152.625, 37152.6666666667, 37152.7083333333, 37152.75, 37152.7916666667, 37152.8333333333, 37152.875, 37152.9166666667, 37152.9583333333, 37153, 37153.0416666667, 37153.0833333333, 37153.125, 37153.1666666667, 37153.2083333333, 37153.25, 37153.2916666667, 37153.3333333333, 37153.375, 37153.4166666667, 37153.4583333333, 37153.5, 37153.5416666667, 37153.5833333333, 37153.625, 37153.6666666667, 37153.7083333333, 37153.75, 37153.7916666667, 37153.8333333333, 37153.875, 37153.9166666667, 37153.9583333333, 37154
預測進水量=1656.78, 2516.67, 2416.67, 3368.22, 3809, 3238.11, 3291, 3447, 3250.22, 2367.89, 1797.89, 1697.89, 1200.67, 947.44, 847.44, 701.22, 594.44, 594.44, 544.44, 547.22, 441.67, 544.44, 494.44, 391.67, 344.44, 441.67, 429.44, 294.44, 347.22, 344.44, 344.44, 347.22, 344.44, 347.22, 294.44, 302, 247.22, 250, 247.22, 250
無害流量=37150.2916666667,37154
無害流量=2250,2250
觀測水位=37150.3333333333, 37150.375, 37150.4166666667, 37150.4583333333, 37150.5, 37150.5416666667, 37150.5833333333, 37150.625, 37150.6666666667, 37150.7083333333, 37150.75, 37150.7916666667, 37150.8333333333, 37150.875, 37150.9166666667, 37150.9583333333, 37151, 37151.0416666667, 37151.0833333333, 37151.125, 37151.1666666667, 37151.2083333333, 37151.25, 37151.2916666667, 37151.3333333333, 37151.375, 37151.4166666667, 37151.4583333333, 37151.5, 37151.5416666667, 37151.5833333333, 37151.625, 37151.6666666667, 37151.7083333333, 37151.75, 37151.7916666667, 37151.8333333333, 37151.875, 37151.9166666667, 37151.9583333333, 37152, 37152.0416666667, 37152.0833333333, 37152.125, 37152.1666666667, 37152.2083333333, 37152.25, 37152.2916666667, 37152.3333333333, 37152.375
觀測水位=226.92, 226.91, 226.91, 226.89, 226.87, 226.86, 226.86, 226.84, 226.83, 226.81, 226.79, 226.77, 226.75, 226.74, 226.73, 226.71, 226.69, 226.68, 226.61, 226.54, 226.47, 226.41, 226.36, 226.32, 226.2, 226.08, 226.04, 226.01, 225.98, 225.94, 225.9, 226.04, 226.27, 226.39, 226.5, 226.6, 226.62, 226.61, 226.61, 226.73, 227.21, 227.64, 228.05, 228.2, 228.2, 228.24, 228.46, 228.55, 228.48, 228.56
預測水位=37152.375, 37152.4166666667, 37152.4583333333, 37152.5, 37152.5416666667, 37152.5833333333, 37152.625, 37152.6666666667, 37152.7083333333, 37152.75, 37152.7916666667, 37152.8333333333, 37152.875, 37152.9166666667, 37152.9583333333, 37153, 37153.0416666667, 37153.0833333333, 37153.125, 37153.1666666667, 37153.2083333333, 37153.25, 37153.2916666667, 37153.3333333333, 37153.375, 37153.4166666667, 37153.4583333333, 37153.5, 37153.5416666667, 37153.5833333333, 37153.625, 37153.6666666667, 37153.7083333333, 37153.75, 37153.7916666667, 37153.8333333333, 37153.875, 37153.9166666667, 37153.9583333333, 37154
預測水位=228.56, 228.81, 229.04, 229.4, 229.77, 229.95, 229.97, 229.96, 229.93, 229.75, 229.56, 229.41, 229.28, 229.16, 229.08, 229.03, 228.96, 228.89, 228.81, 228.73, 228.63, 228.55, 228.46, 228.35, 228.23, 228.13, 228.05, 227.97, 227.9, 227.83, 227.76, 227.69, 227.62, 227.55, 227.47, 227.46, 227.44, 227.42, 227.4, 227.38
 
[運轉_SetObject]
.HasLegend = False
.PlotArea.Interior.Color = chConst.chColorNone
Set OldY = .Axes(0)
Set OldX = .Axes(1)
OldY.MajorTickMarks = chConst.chTickMarkCross
OldY.MinorTickMarks = chConst.chTickMarkInside
OldX.MajorTickMarks = chConst.chTickMarkCross
OldX.NumberFormat = “dd-hh"
OldX.Scaling.Minimum = 37150
OldX.Scaling.Maximum = 37154
OldX.MajorUnit = 0.5
OldX.MinorUnit = 1/24
arrSeries = Array(.SeriesCollection(0), .SeriesCollection(1), .SeriesCollection(2), .SeriesCollection(3), .SeriesCollection(4))
For i = 3 To 4 : arrSeries(i).UnGroup True : Next
For i = 4 To 4 : arrSeries(3).Group arrSeries(i) : Next
For i = 3 To 4 : arrSeries(i).Line.DashStyle = chConst.chLineDash : Next
Set newY = .Axes.Add(arrSeries(3).Scalings(chConst.chDimYValues))
newY.Position = chConst.chAxisPositionRight
newY.HasTitle = True
newY.Title.Caption = “水位 (El.M)"
newY.MajorTickMarks = chConst.chTickMarkCross
newY.MinorTickMarks = chConst.chTickMarkInside
newY.Scaling.Minimum = 224
newY.Scaling.Maximum = 232
Set newXScaling = arrSeries(3).Scalings(chConst.chDimXValues)
newXScaling.Minimum = OldX.Scaling.Minimum
newXScaling.Maximum = OldX.Scaling.Maximum

Categories: 技術分享 | 2 則迴響

[閃光文] MVP 的馬克杯~


擔任 MSDN 版主的贈品~
 
台灣 MVP 部門終於送跟 MVP 有關的贈品啦,這個馬克杯有點半透明,娟娟說看起來很有質感,然後杯子就不是我的了,只好閃光一下,安慰自己:
Categories: 組織 | 發表留言

在WordPress.com寫網誌.