後來重新再做一次,步驟很簡單,程式碼幾乎跟龍珠的一樣,只要照著打再小做修改就可以完成這次的作業。
以下是回傳函數修改的範例
ucDragonBallRGB[iDragonBallID][j-iObjectY1][i-iObjectX1][0] != 0
這行是龍珠的四維RGB陣列,分別儲存[龍珠編號][龍珠圖片的長][龍珠圖片的寬][紅色像素]另外兩行以此類推,只要修改成相框適用的三維陣列image2RGB[j][i][0] != 0就可以了,除非有需要做一個以上的相框,否則就沒有編號必要,因此就可以把第一維的陣列刪去,YUV陣列也是比照辦理,而不用減iObjectXY1的原因是相框的大小原本就會調整成和視訊擷取視窗的大小相同。
接下來只要在按鈕中將事先使用 capGetVideoFormat 來取得視訊內容的高與寬,再把相框的位置設定為視訊擷取視窗的大小就可以了,如下。
iObjectWidth = iVideoWidth;
iObjectHeight = iVideoHeight;
再將影像元件中的色彩資料放到陣列中,這邊一樣只需要用三維陣列。
image2RGB[j][i][0] = (unsigned char) iB;
最後再利用部落格的公式將RGB轉換為YUV就大功告成了。(完成圖)
b部分相較起來就簡單的多,只要將畫面轉換為灰階就可以完成。
做法有兩種,一種是直接修改ptrCapture[k+1]和ptrCapture[k+3]的值,灰階的值都是128,另一種做法是跟元件Color Dialog做連結,就可以自己選擇喜歡的顏色,連結的程式碼如下
if (ColorDialog1->Execute())
iR = GetRValue(ColorDialog1->Color);
iG = GetGValue(ColorDialog1->Color);
iB = GetBValue(ColorDialog1->Color);再將RGB用公式轉換為YUV即可。
我在Coding的過程中有發生一個問題,和元件做好連結後,選的顏色卻和顯示出來的顏色不同,如下圖
我原本選的顏色是黑色,但畫面上卻顯示為奇怪的綠色,經過debug後發現,原來是我ptrCapture[k+3]的值放錯,將iV放成了iY,改正後顏色也便正常了。
(黑白照)
(靈異綠照)
(情色紅照)
沒有留言:
張貼留言