float fx,fy;
[self translate:&fx,&fy];
bgraStart = GET_BGRA_START_BY(fx, fy);
b=pixelBuf[bgraStart++]
g=pixelBuf[bgraStart++]
r=pixelBuf[bgraStart++]
a=pixelBuf[bgraStart++]
#define GET_BGRA_START_BY(x, y) \
(lround((y)*pitch + (x)*bpp))
看似没有任何问题的宏定义,实际上,隐含了极大的隐患。
如果x,y任何一个是小数的话,结果可能就跟您想的完全不一样了。
真正的宏定义应该是 :
#define GET_BGRA_START_BY(x,y) \
(lround(y)*pitch + lround(x)*bpp)