2013-01-16 77 views
0

給我的指令非常含糊,我完全不知道該怎麼做。需要一些幫助。我會盡力解釋,希望有人能幫助我。創建一個2D陣列輸出一個pmm文件C++

我需要時設置的像素(i,j)的具有值欄的顏色作爲在生成規定的寬度和高度的PPM文件:

float col = float (((i & 0x08) == 0)^((j & 0x08) == 0));

你可能想使用用於RGB顏色的結構如下:

struct RGB { 
    float r; 
    float g; 
    float b; 
}; 

數組中的每個元素爲[0.0,1.0]的範圍內和寫入文件之前必須被轉換成[0,255]。

這是儘可能多的信息,因爲我有。我真的只是失去了他真正希望我做的事情。對於更有經驗但不適合我的人來說,這可能是足夠的信息。有人可以詳細說明這一點。另外,第一個公式/代碼片段究竟做了什麼?

我仍然不知道我和j是什麼或公式是什麼或如何生成的值寫入二維數組的RGB!?!?

+0

'i'和'j'是你想要設置的像素座標。正如你所寫的:「**當你設置像素(i,j)的顏色與col的值,如:float col = float(((i&0x08)== 0)^((j&0x08)= = 0));'*「 –

+0

我覺得自己像個白癡,現在我已經完成了大部分的安裝和工作,感謝所有幫助人員。 – BerkleyJ

回答

0

在第一個公式,你會得到不值中的[0 1]範圍,但0s1s,因爲運算符==傳回(在比特的表示0或1)truefalse。操作XOR(^)在0和/或1也將返回0或1

這裏是操作XOR的真值表

----------------- 
| a | b | a^b | 
----------------- 
| 0 | 0 | 0 | 
----------------- 
| 0 | 1 | 1 | 
----------------- 
| 1 | 0 | 1 | 
----------------- 
| 1 | 1 | 0 | 
----------------- 

從範圍轉換[0 1]〜[0 255 ]只是乘以255的值。

void convertTo_255(struct RGB * array, size_t count { 
    for (size_t i = 0; i < count; i++) { 
     array[ i ].r *= 255; 
     array[ i ].g *= 255; 
     array[ i ].b *= 255; 
    } 
+0

這是創建/生成一個結構RGB數組,並生成值來填補它使我困惑?如何在編譯後設置數組的大小時,從命令行創建具有維度的數組。什麼是i和j值? – BerkleyJ

1

PPM是非常簡單的位圖格式,你基本上已經在你的問題中描述了它。要查看更多詳細信息,請將其或谷歌地圖http://netpbm.sourceforge.net/doc/ppm.html

要將範圍[0.0 .. 1.0]轉換爲[0 .. 255],只需對每個像素分量執行乘以255.0。總結:將ppm頭部寫入文件,遍歷所有像素,將其組成部分乘以255,轉換爲整數,然後以文本形式寫入文件。文件中的所有值都由空格分隔。

第一個代碼片段告訴你如何生成圖片。它基本上意味着,如果右邊的第四位在i和j座標中不同,則顏色爲白色,如果相同,則顏色爲黑色。這應該產生一個16乘16格的棋盤格。