Daily Archives: 2006/07/25

[VBNET] 圖檔減色運算程式碼


這是我在 VB.NET 將全彩色減色運算到 256 色的部份程式碼:
….
bitmapData = bitmap.LockBits(rect, Drawing.Imaging.ImageLockMode.WriteOnly, Drawing.Imaging.PixelFormat.Format8bppIndexed)
Dim pixels As IntPtr = bitmapData.Scan0
Dim pBits As Int32
Dim bits As Byte()

If (bitmapData.Stride > 0) Then
   pBits = pixels.ToInt32()
Else
   pBits = pixels.ToInt32() + bitmapData.Stride * (Height – 1)
End If

Dim stride As Integer = Math.Abs(bitmapData.Stride)
ReDim bits(Height * stride)

Dim row, col As Integer

Dim arrBitmapArray As Integer() = GetBitmapIntegerArray(BmpCopy)
Dim ipp As Integer
Dim pixel As ColorDim i8BppPixel As Integer
Dim luminance, colorIndex As Double

For ipp = 0 To UBound(arrBitmapArray)
   pixel = Color.FromArgb(arrBitmapArray(ipp))
   luminance = (pixel.R * 0.299) + (pixel.G * 0.587) + (pixel.B * 0.114)
   colorIndex = Math.Round((luminance * (nColors – 1) / 255))
   bits(ipp) = CByte(colorIndex)
Next
CopyMemory(pBits, bits, Height * stride)
bitmap.UnlockBits(bitmapData)
….

Public Function GetBitmapIntegerArray(ByVal oBitmap As Object) As Integer()
   Dim nLen = oBitmap.Width * oBitmap.Height
   Dim hBitmap As IntPtr = oBitmap.GetHbitmap()
   Dim arrBmpArray(nLen – 1) As Integer
   Dim summy As Integer = GetBitmapBits(hBitmap, 4 * nLen, arrBmpArray)
   DeleteObject(hBitmap)
   Return arrBmpArray
End Function

如果只要 GetPixel ,可以直接:
GetBitmapIntegerArray
配上 CopyMemory 也可以轉為 2D 的陣列。


有興趣的可以參考那篇的討論,那篇發問者要問 c# ,所以他有把他的 c# 原始碼改好後放上討論區。

廣告
Categories: 技術分享 | 1 則迴響

HiNet 機房斷電,ADSL斷線 5小時


大概在昨天 (7/25) 晚上 6:40 左右,可能是颱風影響,我們家這區大概有瞬間斷電 1 秒鐘左右。
吃完晚飯要收 eMail 來改專案管理計畫書時,才發覺網路不通,查了問題發覺是 ADSL 數據機紅燈在閃,就打電話給客服,克服有點急著回覆我的問題,我只好先把他話頭打斷,強調我這區有瞬間斷電的狀況,請他查查。
他要求我先把 ADSL 數據機關掉,他開始對機房送重新啟動控制碼,發覺傳回錯誤碼後,跟我要行動電話號碼,並告知機房修復後會主動通知。
等了兩個鐘頭,網路仍然沒恢復,東西又要上班前寄出去,就再打電話問客服,我記得 HiNet ADSL 有送免費的撥接帳號,想說可以先用撥接帳號來連線。這個客服也急著回答說 ADSL 數據機不能用撥接帳號,我跟他說我的無線網路主機有內建數據機,不需要替我擔心,她還一值強調 ADSL 數據機不能撥接… 真是夠了。
好不容易溝通清楚,她幫我查我先前到底有沒有開設撥接帳號,居然是沒有… 而且線上不能申辦,必須到櫃檯辦。只好請她幫我做紀錄,說客戶建議希望碰上機房故障非可歸咎於客戶原因的情況時,能提供臨時的撥接帳號,例如說每半天申請一次,供客戶應急使用。
由於沒網路可用,只好拿隨身碟直接去委辦單位拷檔。回來後先洗個澡再來弄,大概到 11 點多網路才恢復。剛剛才把檔案發出去。
現在都用網路傳遞資料,有時候沒有網路,系統都卡在那邊不能動,甚至急著收電子郵件都不行,有空可能要去櫃檯開通撥接帳號才行。
Categories: 嗜好 | 發表留言

曾文水庫這次放水實在有點離譜


依照水利法施行細則第 51 條:
設有洩洪閘門之水庫,於洪水期間水庫水位上升段,其最高放水流量,不得大於流入水庫之最高流入量;水庫放水流量之增加率,不得超過該水庫流入量之最高增加率。但有危及水庫安全之虞時,得依前條防洪操作及緊急運轉措施辦理。
前項放水流量,在水庫下游設有下池或相當於下池功能之設施,供以調節上游水庫放水者,為調節後之放水流量。


此條文的精神為有閘門水庫之放水行為不能造成人為洪水大於天然洪水。

水利法施行細則是水庫運用要點的母法,亦即子法不得牴觸母法,這次凱米颱風水庫最高流入量為 580 cms ,可是曾文水庫最高放水量卻為 994 cms ,在此情況下,不得引用曾文水庫運用要點第 22 點,因為牴觸母法,而且總量不得大於 900 cms ,放水放到 994 cms 也違反運用要點第 22 點。

有閘門水庫礙於水工構造物的限制,有須大於最低放水量才可在不損害水庫附屬構造物的情況下安全放水,水利法施行細則並未排除此除外條款,就法規上是不能違反,但就法律善意角度解釋而言,此一狀況為母法所未規範到之除外情形,故應就水庫安全角度來排放水量。

曾文水庫最小安全放水量為 300 cms,300 cms 明確比 580 cms 還小,故操作上不應當放到 994 cms。

在今年度先前 0609豪雨 及 碧利斯颱風 兩狀況下,雖然有違反水利法施行細則第 51 條的問題,但是畢竟天然洪水流量仍高於曾文水庫放水量,勉強還說得過去,這次天然洪水流量低於水庫放水量,造成人工洪水的情況,實在有點離譜,不過懂水利相關法規、防洪運轉細節的人不多,大概也不會有人追究就是了。

法規定在那邊是拿來遵守的,不是拿來破壞的,若是法規不敷使用,就循程序提出變更需求,現在很多水利相關法規都是行政法規,不用經過立院審核,只要主管機關完成審核就可以,不會曠日費時,所以若覺得法規窒礙難行,請趕快變更法規。

事實上,曾文水庫設計防洪運轉空間是在水位標高 225 ~ 230 公尺間,這幾次運轉都沒超過 226 公尺,大部分時間處於 225 公尺以下,也違反了曾文水庫設計初衷與運用要點設計精神,而曾文水庫配合南化水庫跟越域引水計畫將會經常性蓄水接近 230 公尺,不趁防洪運轉時進行高水位試運轉,將來真的敢蓄水蓄上來嗎?

Categories: 決策支援系統 | 發表留言

在WordPress.com寫網誌.

%d 位部落客按了讚: