題目:Color Models
1.RGB色彩模型
原理:分成RGB三個切面
每個R切面就是 R值固定 BG從0~255
我做了功能 可以用輸入的 也可以用trackbar拉 也可以點圖選顏色
因為 這三個功能 RGB 都適用
每個R切面就是 R值固定 BG從0~255
我做了功能 可以用輸入的 也可以用trackbar拉 也可以點圖選顏色
因為 這三個功能 RGB 都適用
所以就可以用 Sender 方便程式撰寫
例如:
講三個Edit都只像同一個事件
void __fastcall TForm1::TrackBar1Change(TObject *Sender)//呼叫事件時 會傳入一個Sender
TEdit * TE = (TEdit*)Sender; //Sender 會知道誰傳過來的
if(TE->Name == "Edit6") //藉由判斷知道 Edit的改變 要去修改甚麼
{
TB = TrackBar1;
}
else if(TE->Name == "Edit7")
{
TB = TrackBar2;
}
else if(TE->Name == "Edit8")
{
TB = TrackBar3;
}
if(CheckTextIsNum(TE->Text)) //透過之前的程式 用來判斷是不是數字
{
if(TE->Text>=0 && TE->Text<=255)判斷 輸入的數字會不會超過0~255
{
TB->Position = StrToInt(TE->Text);
ShowRGB(TrackBar1->Position,TrackBar2->Position,TrackBar3->Position);
//顯示RGB3個切面
}
}
原理:將影像RGB透過公式轉換成YUV 以方便進行一些處理
也有其他轉換 例如: YCbCr (兩著的Y 都為亮度)
而這次使用的方式是 將Y固定 然後使用者選擇UV
這樣原始影像 樣子會留靠著Y留著 而 色彩值會隨者UV的變化而有不同效果
這樣原始影像 樣子會留靠著Y留著 而 色彩值會隨者UV的變化而有不同效果
1.固定Y值 畫出UV 0~255的圖
會超快0~255 所以記得調整 其他沒有甚麼太大的問題 跟 RGB一樣的作法
Y為128時
Y 為255時
2.將圖讀出來 透過調整UV 來作調整
本次作業最大的BUG出現
Y = ((B*25+G*129+R*66+128)>>8)+16; 這裡的>>8+16
一定要用()分開 如果不分開 會配判斷成往右shift24次 這樣 怎麼都會是0
其他基本上沒有甚麼太大的問題
此外可以在滑鼠點的位置點個紅點好分辨點哪個位子
成果:
YUV都為128時 為灰階
影像的色彩為滑鼠點的地方
程式碼:點我
沒有留言:
張貼留言