線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1828
推到 Plurk!
推到 Facebook!

Scan Line Out of Range

答題得分者是:blk5743
huntfox
一般會員


發表:11
回覆:13
積分:4
註冊:2006-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-01-12 10:51:24 IP:140.123.xxx.xxx 訂閱
請問各位大大
我想要做出能順時針旋轉的圖
可是卻出現了Scan Line Out of Range
不知道是哪裡出了問題
感謝大大的幫忙

[code cpp]
Graphics::TBitmap *TheBitmap, *TempBitmap;
int Width, Height;
Byte *ptr1, *ptr2, bRatio;
TPixelFormat pixel_format;

// 產生一個新的 Bitmap 元件, 作為儲存翻轉或旋轉後的結果
TempBitmap = new Graphics::TBitmap();
// 將 TheBitmap 指向原始影像
TheBitmap = Image1->Picture->Bitmap;
pixel_format = Image1->Picture->Bitmap->PixelFormat;

if (pixel_format == pf8bit){
bRatio = 1;
TheBitmap->PixelFormat = pf8bit;
} else {
bRatio = 3;
TheBitmap->PixelFormat = pf24bit;
}

Width = TheBitmap->Width;
Height = TheBitmap->Height;

TempBitmap->Assign(TheBitmap);
if(RadioGroup1->ItemIndex > 1){
//旋轉後的影像之長寬與原始影像相反
TempBitmap->Width = Height;
TempBitmap->Height = Width;
}

for(int y = 0; y < Height; y ){
ptr2 = (Byte *)TheBitmap->ScanLine[y];
for(int x = 0; x < Width * bRatio; x ){
//順時針旋轉
if(RadioGroup1->ItemIndex == 2){
ptr1 = (Byte *)TempBitmap->ScanLine[x];
ptr1[Height - 1 - y] = ptr2[x];
}
}
}

TheBitmap->Assign(TempBitmap);
delete TempBitmap;
[/code]
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-01-12 10:53:28 IP:118.169.xxx.xxx 訂閱
搜尋過站上的文章了嗎?
Scan Line Out of Range這問題站上有很多討論
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-01-12 14:53:15 IP:60.251.xxx.xxx 訂閱
假設你的Height = 640, Width = 480, bRatio = 3
你的TempBitmap->ScanLine[x]的範圍是
0~Width*bRatio = 0 ~ (480*3) = 0 ~ 1440(不含)
你的TempBitmap沒翻轉時,上限應該是480(不含)
你的TempBitmap有翻轉時,上限應該是640(不含)
ScanLine是跟高度有關係,而bRatio只跟每一個像素用幾個bytes表示有關
不要混在一起用

huntfox
一般會員


發表:11
回覆:13
積分:4
註冊:2006-10-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-01-14 20:06:06 IP:118.233.xxx.xxx 訂閱
其實這個問題我比較困惑的是8bit跟24bit在圖形上到底有什麼樣的差異
還好有blk5743taishyang站務副站長的回答
我陸陸續續又找了一些資料

像是Royce520大大的範例
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=38783
taishyang站務副站長的範例
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=40159

或許還要一些時間消化一下
但是應該會得到對很多之前感到困惑的事的一些新的啟發

感謝大大們的回答與資料
^^
blk5743
高階會員


發表:34
回覆:371
積分:236
註冊:2003-11-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-01-15 09:33:38 IP:60.251.xxx.xxx 訂閱
其實這個問題我比較困惑的是8bit跟24bit在圖形上到底有什麼樣的差異
=======================================================

一般狀況來說 8bits的圖形是指灰階圖形每一個pixel只用8bits表示
24bits是彩色的RGB各用8bits表示

如果你有一張灰階及一張彩色的圖 圖片大小皆為640*480的話
行數 列數 檔案大小
灰階 640 480 640*1*480
彩色 640 480 640*3*480
但是因為彩色的一個pixel實際上是由RGB三個顏色所組成的
所以灰階圖形每一列你要處理640個點,但彩色則要處理640*3

這樣子有初步的了解了嗎
如果要詳細了解跟影像有關的資訊 可以上維基百科或google等網站搜尋即可
至於處理的sample code我相信在本站你可以找到很多實用的範例
系統時間:2024-03-28 23:03:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!