查找位图的xy位置

时间:2014-05-14 12:29:15

标签: c bitmap position pixel

我写了一个函数,以获取所请求像素位置的位置(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);
}

1 个答案:

答案 0 :(得分:3)

正如我在评论中所说,你确实错过了填充,但不仅如此。

A bitmap file is composed of multi parts:标题,彩色地图和像素地图(主要是)。

根据我对你的问题的理解,你需要你的函数来返回位于xp ; yp位置的像素的文件fp(被认为是位图文件)中的偏移地址。要做到这一点,至少需要三件事:

  • 像素图的偏移量:您可以通过读取Bitmap file header的最后4个字节(dword)来找到它,您可以通过读取偏移量10来获得它在你的文件中。
  • 每行像素数(或图像宽度):您可以在BITMAPINFOHEADER中找到它
  • 每像素位数:您可以在BITMAPINFOHEADER中找到它

如果这样,文件中像素的地址为:

rowSizeInBytes = (((bitPerPixel * imageWidth + 31) * 4) / 32);
pixAddress = pixelMapStartAddress + rowSizeInBytes * yp + ((xp * bitPerPixel) / 8);