2014-02-20 51 views
0

我花了大量的時間尋找圖像處理教程(沒有使用外部庫),沒有真正的成功。如果有人知道任何可以用這種方式獲得幫助的好教程,我會非常感激。圖像處理(向量下標超出範圍)

我對編碼(這是我在大學的第一年)很新穎,我們的教授要求的任務需要原始代碼來轉換24位位圖圖像。

我發現StackExchange一個問題,顯示圖像的旋轉不使用外部庫:

My code rotates a bmp picture correctly but only if the number of pixels is a muliple of 4... can anyone see whats wrong?

使用此代碼(與我們得到的啓動項目,我不得不建立在)我能夠創建此代碼:

字節被定義爲無符號字符的typedef。

void BMPImage::RotateImage() 
{ 

vector<byte> newBMP(m_BIH.biWidth * m_BIH.biHeight); 
long newHeight = m_BIH.biWidth;   /* Preserving the original width */ 
m_BIH.biWidth = m_BIH.biHeight;  /* Setting the width as the height*/ 
m_BIH.biHeight = newHeight;   /* Using the value of the original width, we set it as the new height */ 

for (int r = 0; r < m_BIH.biHeight; r++) 
{ 
    for (int c = 0; c < m_BIH.biWidth; c++) 
    { 
     long y = c + (r*m_BIH.biHeight); 
     long x = c + (r*m_BIH.biWidth - r - 1) + (m_BIH.biHeight*c); 
     newBMP[y] = m_ImageData[x]; 
    } 
} 

m_ImageData = newBMP; 
} 

這段代碼並不顯示任何紅色squigglies,但是當我嘗試執行旋轉,我得到一個向量下標越界錯誤信息彈出。我以前只在一個任務中使用過矢量,所以我不知道問題出在哪裏。請幫助!

我認爲這個問題可能會在這裏:

m_ImageData = newBMP; 

回答

0

假設你newBMP具有寬度= 1,高度= 2,那麼

vector<byte> newBMP(m_BIH.biWidth * m_BIH.biHeight); 

會2號與有效indexrange [0陣列1]。你的指數計算

long y = c + (r*m_BIH.biHeight); 

將2 C = 0和r = 1。但是2不是你的載體的有效指標,並與

newBMP[y] = ... 

訪問不是某一組成部分矢量。這個例子中你的索引x是-1。

+0

所以...我想要-1最後一個數字來說明第一個元素是0而不是1,而矢量大小實際上看起來少一個,因爲它以0開始......然後......長y =(c +(r * m_BIH.biHeight))-1'? – Mel