2014年12月12日 星期五

資工三乙 01360592 范姜詩婷 HW2


這次的作業是
分別統計一張彩色影像之紅、綠、藍色彩的 PDF
分別統計一張彩色影像之紅、綠、藍色彩的 CDF



首先就是要先讀取圖片的每一個像素點
計算RGB的值
  
        for(j=0; j<iImageHeight; j++)
        {
         bPtrImage = (Byte *)Image1->Picture->Bitmap->ScanLine[j];
         for(i=0; i<iImageWidth; i++)
                for(k=0; k<3; k++)
                        iHistogram[k][bPtrImage[i*3+k]]++;
         }



再將統計好的RGB值
分別畫在三個畫布上



         //紅色
         Image2->Canvas->Pen->Color=clRed;
         Image2->Canvas->MoveTo(i,255);
         Image2->Canvas->LineTo(i,255-iHistogram[2][i]*0.25);


         //綠色
         Image3->Canvas->Pen->Color=clGreen;
         Image3->Canvas->MoveTo(i,255);
         Image3->Canvas->LineTo(i,255-iHistogram[1][i]*0.25);


         //藍色
         Image4->Canvas->Pen->Color=clBlue;
         Image4->Canvas->MoveTo(i,255);

         Image4->Canvas->LineTo(i,255-iHistogram[0][i]*0.25);


PDF 






然後做CDF
一樣先計算圖片每個像素的RGB值
再分別在畫布上作圖


         //畫圖
        Image2->Canvas->MoveTo(0,255);
        Image3->Canvas->MoveTo(0,255);
        Image4->Canvas->MoveTo(0,255);

        for(i=0; i<256; i++)
        {

         //紅色
         Image2->Canvas->Pen->Color=clRed;
         Image2->Canvas->LineTo(i,255-iHistogram[2][i]*255/iHistogram[2][255]);


         //綠色
         Image3->Canvas->Pen->Color=clGreen;
         Image3->Canvas->LineTo(i,255-iHistogram[1][i]*255/iHistogram[1][255]);

         
         //藍色
         Image4->Canvas->Pen->Color=clBlue;
         Image4->Canvas->LineTo(i,255-iHistogram[0][i]*255/iHistogram[0][255]);



         }

CDF





其實這個程式並不難
了解每一行做的事情
多花點心就可以做出來
只是中間的過程
debug實在很痛苦
畢竟一直看螢幕
很容易打錯字沒看到
一直以為是哪裡的語法錯誤
沒想到只是打錯字
但做出來的時候心情真的很好~~






沒有留言:

張貼留言