常用算法

1.操作像素使圖片順時針旋轉90度
void
ef_u_clockwiserotation_90(const unsigned char* psrcdata,
                          const int ntype,
                          const int width,
                          const int height,
                          unsigned char* pdstdata)
{
    if (!psrcdata || !pdstdata) {
        return;
    }
    
    if (ntype == DATA_TYPE_32RGBA) {
        int w,h;
        
        for (w = 0; w < width; w++) {
            argb *newline = (argb*)(pdstdata + w*height*sizeof(RGBAOGJ));
            for (h = 0; h < height; h++) {
                argb *oldline = (argb*)(psrcdata + h*width*sizeof(RGBAOGJ));
                newline[height-h-1] = oldline[w];
            }
        }
    }
}
2.調整顏色飽和度
把紅,綠和藍三種顏色時進行飽和度運算
  // 下面基於NTSC標準來計算。
    FLOAT grey = pC->r * 0.2125f + pC->g * 0.7154f + pC->b * 0.0721f;
    pOut->r = grey + s * (pC->r - grey);
如果s 大於0並且小於1,飽和度會減少。如果s 大於1,就是增加飽和度。
顏色值如下計算:
r = g = b = 0.2125*r + 0.7154*g + 0.0721*b
3.調整顏色對比度值
說明:
輸入的alpha值是完全拷貝,沒有任何修改。
這裏返回值是跟參數裏的pOut 是一樣的。通過返回值,可以讓這個函數成爲別的函數的參數。
這個函數的紅,綠,藍都會用下面的公式計算結果輸出:
pOut->r = 0.5f + c * (pC->r - 0.5f);
如果c小於1,就會減小對比度。如果c大於1,就會增加對比度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章