本週要請同學思考的問題是如何將存於影像物件之中的色彩值, 讀入到陣列變數之中, 以供程式處理之用。
目前, 大部分同學已經會從顯示在螢幕上的視訊, 擷取一個畫面到影像物件之中, 為了提升對影像內容的分析效能, 有必要進一步影像元件中的色彩內容放到陣列中, 讓程式可以直接分析。
第一個方法是使用 Canvas 元件的 Pixels Property (TCanvas::Pixels), Pixels 的資料型態為 TColor datatype, 因此, 可以用如下的程式碼, 將色彩值讀入到陣列 tcColorMatrix 之中。
for (i=0;i<iImageHeight;i++)
for (j=0;j<iImageWidth;j++)
tcColorMatrix1[i][j] = Image1->Canvas->Pixels[j][i];
第二個方法是透過 Bitmap 元件的 ScanLine Property 來取得存放每一列色彩值的起始指標, 再透過該指標依序取得每一個像素的色彩值。
Byte *ptr; // 宣告指標變數;
for (i=0;i<iImageHeight;i++)
{
ptr = (BYTE *) Image1->Picture->Bitmap->ScanLine[i];
k = 0;
for (j=0;j<iImageWidth;j++)
{
tcColorMatrix1[i][j] = (TColor) RGB(ptr[k+2],ptr[k+1],ptr[k]);
k = k + 3;
}
接下來, 同學可以將之前所寫的程式, 改寫成使用 Scanline Property 的方式, 以加快程式的執行效能。
範例程式 SampleProgram5.txt
沒有留言:
張貼留言