Re: [問題] 新手C++ bmp旋轉

看板C_and_CPP作者時間14年前 (2011/04/14 19:44), 編輯推噓1(104)
留言5則, 3人參與, 最新討論串2/2 (看更多)
我也是個新手村的初心者 回回文 被鞭幾次 應該程式功力會進步吧 就在眾高手前 耍一下菜刀好了~~冏 以一個 5*5 矩陣為例 0 1 2 3 4 旋轉90度應為 20 15 10 5 0 5 6 7 8 9 21 16 11 6 1 10 11 12 13 14 22 17 12 7 2 15 16 17 18 19 23 18 13 8 3 20 21 22 23 24 24 19 14 9 4 你的旋轉公式如下 void rot90(char* in,char* out,unsigned int& rw,unsigned int& rh){ //in 將影像視為一維char值 //out 輸出資料 //rw ,rh 寬高 unsigned int p=0; for(unsigned int w=0;w<rw;w++){ for(unsigned int h=0;h<rh;h++,p++){ out[p]=in[(h+1)*rw-1-w]; } } } 我用筆算 算不出 會旋轉的結果 ex 以5*5矩陣為例 out[0]=in[ (0+1) *5 -1- 0]; out[0]=in[4]; //答案就錯了 旋轉用二維的方式去做會比較好懂也比較好做 ex. void rot90( int **in_ary,**out_ary, int h,int w){ int p=0; for(i=h-1;i>=0;i--){ fot(j=0;j<w;j++){ out_ary[j][p]=in_ary[i][j]; }//0->w p++; }//從最後一行讀回來 } 拉成一維矩陣感覺沒那麼簡單 不然你就要用旋轉公式 x'= xcos(角度) - ysin(角度) y'= xsin(角度) + ycos(角度) 旋轉也是有要考慮的問題 例如旋轉後影像大小會改變 還有計算出來位置有負的 那也要經過校正 C++板 解問首PO 歡迎高手指正 希望自己程式功力可以越強 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.23.24.11

04/14 20:05, , 1F
0.0
04/14 20:05, 1F

04/14 20:18, , 2F
其實原po沒有寫錯,反而是你的compile肯定不會過XD
04/14 20:18, 2F

04/14 20:39, , 3F
bmp檔的pixel好像是上下顛倒的,所以你的可能會變逆時針
04/14 20:39, 3F

04/14 20:43, , 4F
不過看你這麼用心,推一下好了
04/14 20:43, 4F

04/14 20:46, , 5F
沙發
04/14 20:46, 5F
感謝大大推一下好了XXXD 這我有自己稍微測試過 應該是OK的 BMP 我是用一個.h檔案(老師寫的) 所以都沒刻意去注意這一塊 最近看到板上有人在寫圖的程式 我才在想說 K一下怎麼做 ※ 編輯: ouyang0916 來自: 114.41.227.66 (04/15 11:04)
文章代碼(AID): #1Dfju3zr (C_and_CPP)
文章代碼(AID): #1Dfju3zr (C_and_CPP)