發表文章

目前顯示的是 2月, 2014的文章

色彩轉換結構應用C/C++的Struct與Union

這是一個關於我在影像處理程式中很想很久的問題, 可以用一個結構就能r,g,b存取一個像素,或是其他的色彩空間名稱,如xyz、yuv、ycbcr等。 不過寫出來之後還是不很理想,或許還是得用類別才是最好的解決方法。 利用的是結構中的巢狀匿名結構成員,這些匿名的結構中的成員最後都會成為最上層的結構的成員。 (from C++ Primer) #include <iostream > using namespace std; typedef struct {   union   {         struct         {               int r, g, b;         };                  // 當沒有變數名稱相同的時候          struct         {               float h, s, i;         };         // 當有變數名稱相同的時候          struct         {               float y;                              // 因為名稱同樣有y, 所以 y 自己成為一個欄位                union{                    struct{                           float u, v;                           };                    struct{                           float x, z;                            };                    struct{                           float cb, cr;                           };               };         };    };    } Pixel; int main() {     float a,b,c;     Pixel p;          //

C/C++陣列初始化錯誤

有同學問我陣列給值的問題,這點在C++ Primer有寫到, 一些程式設計的書也會寫,只是一般同學都不會注意到"初始化"和"給值"是不同的。 #include <iostream > using namespace std; //正常作法-初始化 int inter_priority[6][6][4] =  { {{4,0,0,0},{4,3,2,1},{4,3,2,1},{4,2,3,1},{4,2,1,3},{4,0,0,0}}, {{4,3,2,1},{4,3,2,1},{4,3,2,1},{4,3,2,1},{4,2,1,3},{4,3,2,1}}, {{4,2,1,3},{4,3,2,1},{4,3,1,2},{4,3,2,1},{4,2,1,3},{4,3,1,2}}, {{4,1,3,2},{4,2,3,1},{4,3,1,2},{4,1,3,2},{4,1,2,3},{4,1,3,2}}, {{3,2,1,4},{4,2,1,3},{3,2,1,4},{4,2,1,3},{3,2,1,4},{3,2,1,4}}, {{4,0,0,0},{4,3,2,1},{4,3,1,2},{4,1,3,2},{4,2,1,3},{4,0,0,0}} }; // 同學的錯誤用法-當成給值 int inter_priority[6][6][4]; int main() { // 同學的錯誤用法-當成給值 inter_priority =  { {{4,0,0,0},{4,3,2,1},{4,3,2,1},{4,2,3,1},{4,2,1,3},{4,0,0,0}}, {{4,3,2,1},{4,3,2,1},{4,3,2,1},{4,3,2,1},{4,2,1,3},{4,3,2,1}}, {{4,2,1,3},{4,3,2,1},{4,3,1,2},{4,3,2,1},{4,2,1,3},{4,3,1,2}}, {{4,1,3,2},{4,2,3,1},{4,3,1,2},{4,1,3,2},{4,1,2,3},{4,1,3,2}}, {{3,2,1,4},{4,