Social Icons

twitterfacebookgoogle plusrss feedemail

4/14/2013

影像處理 -透明遮罩

在前面幾篇文章中已經介紹了許多影像處理的方法,今天稍微介紹一下怎麼加一個透明遮罩在影像上面。

其實稍微想一下應該就可以知道~,只要在矩陣的某一個區塊,把那個區域的值加上一個數值,就可以得到這個效果。


程式碼:

#include <iostream>
#include <cstdlib>

#include "bmp.h"

using namespace std;

int R[MaxBMPSizeX][MaxBMPSizeY];
int G[MaxBMPSizeX][MaxBMPSizeY];
int B[MaxBMPSizeX][MaxBMPSizeY];
int width, height;

int main(int argc, char* argv[])
{
    
    int x, y;
    int r, g, b;
    // 加強值 
    int value;
    
    char* file_name;
    // 圖檔名稱 
    file_name = "Butterfly.bmp";
    
    // 開啟並讀取全彩(24bits)bmp 影像圖檔,如果是灰階影像只要存取RGB其中一項即可!
    // RGB 三個 channel 的值存入 R, G, B 三個自訂的陣列中
    // 陣列大小規定是 MaxBMPSizeX * MaxBMPSizeY
    // 同時取得該影像圖檔的高度和寬度
    
open_bmp( file_name, R, G, B, width, height);
    // 影像處理(加強RGB形成半透明效果)
    // 設定增強值 
    value = 70;
    // 起始點, 以圖的左下角為原點 
    int startPointX = width / 4;
    int startPointY = height / 4;
    // 透明遮罩大小 
    int transparencyAreaWidth = 100;
    int transparencyAreaHeight = 200;
    // 影像處理(透明遮罩) 
    for (x = startPointX ; x <= width * 3 / 4; x++) {
        for (y = startPointY ; y <= height * 3 / 4 ; y++) {
            r = R[x][y];
            g = G[x][y];
            b = B[x][y];
            R[x][y] = r + value;
            G[x][y] = g + value;
            B[x][y] = b + value;
            // RGB之值不可大於255或小於0 
            if(R[x][y] > 255 )    { R[x][y] = 255; }
            else if (R[x][y] < 0) { R[x][y] = 0; }
            if(G[x][y] > 255 )    { G[x][y] = 255; }
            else if (G[x][y] < 0) { G[x][y] = 0; }
            if(B[x][y] > 255 )    { B[x][y] = 255; }
            else if (B[x][y] < 0) { B[x][y] = 0; }
        }
    }
    // 儲存處理結果至新的圖檔中
    save_bmp("new_transparent.bmp", R, G, B);
    // 關閉 bmp 影像圖檔
    close_bmp();

    system("PAUSE");
    return 0;

}

下載點:
載點1 載點2
(執行環境Visual C 2012 不能執行請重新編譯)

沒有留言:

張貼留言

俗話說
凡走過必留下痕跡,凡住過必留下鄰居
凡爬過必留下樓梯,凡來過必留下IP
看過文章之後歡迎留下您寶貴的意見喔!

 
 
无觅相关文章插件,迅速提升网站流量