[語法] pixel的值放入陣列

看板C_and_CPP (C/C++)作者 (請支持3/27"花蝴蝶")時間16年前 (2009/11/05 22:59), 編輯推噓12(12024)
留言36則, 4人參與, 最新討論串1/3 (看更多)
As title 如果我今天可以知道一張圖的 Height 跟 width 然後一個一個去擷取它的pixel值 要怎麼宣告陣列 new DWORD[][]!? (裡面想放Height跟width 可是都會有錯) 有試過給定很大的數字 Ex: int src[4000][4000] 但似乎不是一個很好的方法 還有就是一個圖的pixel值都很大 用dword陣列的儲存方法對嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.194.100.57

11/05 23:08, , 1F
你的pixel佔幾byte就宣告多大就行了, 只有256階的gray
11/05 23:08, 1F

11/05 23:09, , 2F
image沒必要用DWORD, 不過有RGB三byte的話用DWORD倒也
11/05 23:09, 2F

11/05 23:09, , 3F
可以. 又, new一次new一維[], 兩維要跑迴圈要兩次吧@@
11/05 23:09, 3F

11/05 23:13, , 4F
Pixel* _data = new Pixel[Height*Width];
11/05 23:13, 4F

11/05 23:16, , 5F
Pixel** _row; for() { _row[i] = &_data[i*Width]; }
11/05 23:16, 5F

11/05 23:17, , 6F
Pixel** src = _row;
11/05 23:17, 6F

11/05 23:23, , 7F
就我的經驗來說 宣告成一整塊記憶體會比你分n次new出n個
11/05 23:23, 7F

11/05 23:23, , 8F
陣列來得好用..
11/05 23:23, 8F

11/05 23:34, , 9F
但_row也需要配置空間才是,所以[H+H*W]
11/05 23:34, 9F

11/05 23:44, , 10F
_row[]的new我沒寫出來 但是沒有要和_data宣告成一整塊
11/05 23:44, 10F

11/05 23:54, , 11F
宣告成一整塊, 到時候可以整塊從頭一起delete掉呀XD
11/05 23:54, 11F

11/05 23:55, , 12F
就是new一次[H+H*W], 然後操作一下指標, 還就只要一次了
11/05 23:55, 12F

11/05 23:56, , 13F
不過我的推文主要是說, Pixel ** = new Pixel[H][W];
11/05 23:56, 13F

11/05 23:57, , 14F
這樣寫應該是不行的吧?_?
11/05 23:57, 14F

11/05 23:58, , 15F
PS.補一下, H*W還要看pixel幾byte, H是加sizeof(Pixel*)
11/05 23:58, 15F

11/06 00:03, , 16F
你的資料_data[][]內容物是Pixel 但是_row[]的內容物
11/06 00:03, 16F

11/06 00:03, , 17F
是Pixel* 怎麼能夠一起new呢 這樣搞會出問題吧
11/06 00:03, 17F

11/06 00:04, , 18F
H+H*W裡,前面是H個Pixel* 後面是H*W個Pixel
11/06 00:04, 18F

11/06 00:04, , 19F
這樣不能合在一起new的
11/06 00:04, 19F

11/06 00:14, , 20F
對喔, 以前是直接malloc unsigned char, 如果是自己一個
11/06 00:14, 20F

11/06 00:14, , 21F
class就不能這樣混搭了Orz
11/06 00:14, 21F

11/06 00:15, , 22F
不過照原po想用DWORD的話, 倒是可以換算一下來用XD
11/06 00:15, 22F

11/06 00:23, , 23F
unsigned char才1byte 指標4 byte 你確定你以前可以混
11/06 00:23, 23F

11/06 00:23, , 24F
搭= =??
11/06 00:23, 24F

11/06 00:30, , 25F
糟~~推文越說越亂, 就 #1AFvltqI 這篇最後那個方法啦XD
11/06 00:30, 25F

11/06 00:33, , 26F
Err~~原來我只有畫圖, code在 #1AFujbF- 啦, 暈....Orz
11/06 00:33, 26F

11/06 00:52, , 27F
'new'會否出問題不曉,不過c作alloc單位為byte,自行轉型
11/06 00:52, 27F

11/06 00:55, , 28F
所以清楚指標和指指標所佔的byte就可以,印象中是一樣的
11/06 00:55, 28F

11/06 01:08, , 29F
#1AFujbF-我看了,在C++中這樣寫實在太tricky..
11/06 01:08, 29F

11/06 01:10, , 30F
要把不同型態的指標轉來轉去要有清楚的腦袋,而且C-style
11/06 01:10, 30F

11/06 01:10, , 31F
的轉型在C++中最好是用reinterpret_cast<>取代 這樣
11/06 01:10, 31F

11/06 01:10, , 32F
會讓你的程式碼一個看起來就很噁爛XDD
11/06 01:10, 32F

11/06 01:10, , 33F
唯一的好處是delete時比較方便 但是比較好的作法應該是
11/06 01:10, 33F

11/06 01:11, , 34F
用一個class把它包起來 然後在dtor裡面release就好
11/06 01:11, 34F

11/06 01:16, , 35F
的確C++/class用一個new把內部行為包裝起來會比較好:)
11/06 01:16, 35F

11/06 09:43, , 36F
恩恩...謝謝!
11/06 09:43, 36F
文章代碼(AID): #1AykXj2C (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AykXj2C (C_and_CPP)