我写了一个函数,以获取所请求像素位置的位置(x250 y230
- 整个图片的中心 - x500 y460
)。问题是该函数返回的位置在向上17像素差异,在右边更多12像素差异。我错过了什么..垫子?我该如何正确使用此功能?
size_t find (FILE* fp, dword xp, dword yp)
{
int i;
int pointer = (sizeof(DIB)+sizeof(BMP)+2)+(250*3);
for(i=0; i<460; i++)
{
fseek(fp, pointer+(i*pointer), SEEK_SET);
}
return ftell(fp);
}
答案 0 :(得分:3)
正如我在评论中所说,你确实错过了填充,但不仅如此。
A bitmap file is composed of multi parts:标题,彩色地图和像素地图(主要是)。
根据我对你的问题的理解,你需要你的函数来返回位于xp ; yp
位置的像素的文件fp(被认为是位图文件)中的偏移地址。要做到这一点,至少需要三件事:
dword
)来找到它,您可以通过读取偏移量10来获得它在你的文件中。如果这样,文件中像素的地址为:
rowSizeInBytes = (((bitPerPixel * imageWidth + 31) * 4) / 32);
pixAddress = pixelMapStartAddress + rowSizeInBytes * yp + ((xp * bitPerPixel) / 8);