像素RGB分離後如何還原? |
尚未結案
|
fly093218
一般會員 發表:8 回覆:7 積分:3 註冊:2008-11-08 發送簡訊給我 |
我先用以下方法將RGB分離:
for(int y=0;y<=511;y ){ for(int x=0;x<=511;x ){ b[x][y]=((a[x][y])>>16); } } 原始值為10658466(16進制) 轉為十進制162162162 分離後為162 可是之後我想再將他還原回去,用相同的方法得到的值卻不一樣 for(int y=0;y<=511;y ){ for(int x=0;x<=511;x ){ b[x][y]=((a[x][y])<<16); } } 所得到的值卻為 -1566441472 麻煩請各位大大及高手們幫忙解答,謝謝!!
------
jason |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
mynameisoa
一般會員 發表:4 回覆:8 積分:2 註冊:2008-10-07 發送簡訊給我 |
|
fly093218
一般會員 發表:8 回覆:7 積分:3 註冊:2008-11-08 發送簡訊給我 |
|
blk5743
高階會員 發表:34 回覆:371 積分:236 註冊:2003-11-17 發送簡訊給我 |
|
fly093218
一般會員 發表:8 回覆:7 積分:3 註冊:2008-11-08 發送簡訊給我 |
|
blk5743
高階會員 發表:34 回覆:371 積分:236 註冊:2003-11-17 發送簡訊給我 |
===================引 用 fly093218 文 章=================== 我先用以下方法將RGB分離: for(int y=0;y<=511;y ){ for(int x=0;x<=511;x ){ b[x][y]=((a[x][y])>>16); } } 原始值為10658466(16進制) 轉為十進制162162162 分離後為162 可是之後我想再將他還原回去,用相同的方法得到的值卻不一樣 for(int y=0;y<=511;y ){ for(int x=0;x<=511;x ){ b[x][y]=((a[x][y])<<16); } } 所得到的值卻為 -1566441472 麻煩請各位大大及高手們幫忙解答,謝謝!! *********************************************************** 我再仔細看了一下 發現了幾個問題 1. RGB一般來說是各8bits共為24bits 你的原始值0x10658466為什麼會用到32bits(或許你的RGB並非各用8bits表示) 2. 10658466(16進制) => 275088486(10進制) 為什麼你的值是162162162 3. 你的原始值a[x][y]的陣列根本都沒動過,為什麼還需要還原(被改變的是b[x][y]) 4. 我從你還原得到的值-1566441472(0xA2A20000)以及你的10進制值162162162來猜 你真正的原始值應該是0xA2A2A200(RGB值各為0xA2 => 162),因此在a[x][y]<<16之後,會變成0xA2A20000也就是你得到的-1566441472 根據以上的判斷,我猜有些地方你可能弄錯了,請在檢查一下吧 另外我之前回答的部份,只要被你清掉了, 電腦就不知道該回復為什麼值,因此就沒辦法還原了 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |