請問為什麼會scanline out of range |
缺席
|
encoref70036
一般會員 發表:29 回覆:47 積分:15 註冊:2011-05-18 發送簡訊給我 |
這是3x3低通的程式碼
[code cpp] TMDIChild *Child; Graphics::TBitmap *nBitmap = new Graphics::TBitmap(); Graphics::TBitmap *pBitmap = new Graphics::TBitmap(); Byte *ptr,*aptr,*uptr,*dptr; int sum1,sum2,sum3,type,up,down,left,right; Child = (TMDIChild *) ActiveMDIChild; Child->Image1->Picture->SaveToFile("temp.bmp"); nBitmap->LoadFromFile("temp.bmp"); pBitmap->LoadFromFile("temp.bmp"); DeleteFile("temp.bmp"); for (int y = 0;y < nBitmap->Height;y ) { up=(y-1); down=(y 1); if(up<0) up=0; if(down>nBitmap->Height) down=nBitmap->Height; ptr=(Byte*)nBitmap->ScanLine[y]; aptr = (Byte*)pBitmap->ScanLine[y]; uptr=(Byte*)pBitmap->ScanLine[up]; dptr=(Byte*)pBitmap->ScanLine[down]; for (int x = 0;x < nBitmap->Width;x ) { left=(x-1); right=(x 1); if(left<0) left=0; if(right>nBitmap->Width) right=nBitmap->Width; sum1 = 0; sum2 = 0; sum3 = 0; sum1 = (int)(uptr[4*left] uptr[4*x] uptr[4*right] ptr[4*left] ptr[4*x] ptr[4*right] dptr[4*left] dptr[4*x] dptr[4*right]); sum2 = (int)(uptr[4*left 1] uptr[4*x 1] uptr[4*right 1] ptr[4*left 1] ptr[4*x 1] ptr[4*right 1] dptr[4*left 1] dptr[4*x 1] dptr[4*right 1]); sum3 = (int)(uptr[4*left 2] uptr[4*x 2] uptr[4*right 2] ptr[4*left 2] ptr[4*x 2] ptr[4*right 2] dptr[4*left 2] dptr[4*x 2] dptr[4*right 2]); aptr[4*x] = (Byte)(sum1/9); aptr[4*x 1] = (Byte)(sum2/9); aptr[4*x 2] = (Byte)(sum3/9); } } Child->Image1->Picture->Assign(pBitmap);[/code] 我不是有判斷 if(up<0) up=0; if(down>nBitmap->Height) down=nBitmap->Height; 和 if(left<0) left=0; if(right>nBitmap->Width) right=nBitmap->Width; 為什麼還會scanline out of range呢 麻煩大俠了 |
encoref70036
一般會員 發表:29 回覆:47 積分:15 註冊:2011-05-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |