圖片色彩分布折線圖
*圖片只支援副檔名.bmp
這次作業是要畫出照片的色彩分布,
程式的剛開始,當然是要先能載入圖片,
這部分老師在上課就講過了,
使用OpenPictureDialog元件就可以做到了。
然後就進入正題了,先計算出每個像素中顏色的分配,
利用"Histogram"按鈕觸發程式。
先利用"bPtrImageRow"載入圖片的Bitmap,
在宣告三個陣列B[],G[],R[]
用迴圈去計算每個Byte裡的RGB數值。
最困難的就是在畫圖的部分了,
剛開始沒想太多,直接用陣列裡的數字去畫,
結果發現數字太大了,會整個超過我原本畫的格子。
後來又想說那就把它除與某個數字吧
於是就寫成了這個樣子:Image3->Canvas->LineTo(k+1,105-(B[k]/100));
程式的剛開始,當然是要先能載入圖片,
這部分老師在上課就講過了,
使用OpenPictureDialog元件就可以做到了。
然後就進入正題了,先計算出每個像素中顏色的分配,
利用"Histogram"按鈕觸發程式。
先利用"bPtrImageRow"載入圖片的Bitmap,
在宣告三個陣列B[],G[],R[]
用迴圈去計算每個Byte裡的RGB數值。
最困難的就是在畫圖的部分了,
剛開始沒想太多,直接用陣列裡的數字去畫,
結果發現數字太大了,會整個超過我原本畫的格子。
後來又想說那就把它除與某個數字吧
於是就寫成了這個樣子:Image3->Canvas->LineTo(k+1,105-(B[k]/100));
波形變得很小,而且如果圖片如果在更大的畫,還是會爆掉。
所以後來就想到那就用百分比去寫吧
先用一個迴圈去算出RGB的最大值,
B[k]/bMax*100去算出他的百分比
程式碼
https://www.dropbox.com/s/l1i79r5xu21pj1s/Unit1.cpp?dl=0
所以後來就想到那就用百分比去寫吧
先用一個迴圈去算出RGB的最大值,
B[k]/bMax*100去算出他的百分比
畫出了很奇怪的圖形,
使用ListBox去列出所有數字才發現,
因為"B[k]/bMax"計算時變成了0.XX,
而因為宣告時是使用Int型別,所以小數點後的數字會不見,
即使後來又"*100",但零成一百還是零,
所以只會出現100%的線。
調整後,寫成了B[k]*100/bMax
才終於成為跟Photoshop分析的結果相同的圖
程式碼
https://www.dropbox.com/s/l1i79r5xu21pj1s/Unit1.cpp?dl=0
沒有留言:
張貼留言