调试程序,我这边负责在JNI中将缓冲区中的数据转换成bitmp。测试时用320*240的图像测试正常,但是别人使用的图像宽度为270时,图像出现了错位(没截图,不好理解)。
首先想到的是opencv的图像宽度的问题(其实确实也是这个问题,只是我调试错了地方)。
开始将bitmap的图像的宽度改成能被4整除,结果图像不正确,而且偶尔会出现崩溃…
之后将bitmap和输入的缓冲区的宽度都改成能被4整除,结果图像出现一条斜的没有数据的条纹。
再然后我用raw的数据测试,发现代码正常。最后突然想到,其实输入的缓冲区是opencv的数据,数据的宽度强制转换成能被4整除了。因而把bitmap的宽度改成需要的输入(例如270),将缓冲区的宽度重新计算,转换成4的整数倍。图像正常,程序也没有崩溃…
int widthCV=(int((width-1)/4.0+1)*4);
开始把opencv的和bitmap的宽度弄混了,以至于调试了一会。还有就是最初没想到别人给我的是opencv生成的数据,导致宽度不一定是原始的数据宽度。
以后尽量注意…