bmp图片任意矩形区域像素提取算法

bmp图片裁剪大部分都是在水平方向上指定一个矩形区域,然后进行裁剪。有时候我们的需求是在一个bmp图片ABCD内部,指定一个基准点p0(x0,y0)(裁剪区域的中心点),在水平方向上任意旋转θ角度任意一块长度为l,宽度为w的矩形区域A'B'C'D',这是就需要进行像素提取,核心是坐标系的转换。

基本思路:

1.遍历裁剪区域A'B'C'D'中的每一个像素点p'(i,j)。

2.将A'B'C'D'区域中的每一个点通过坐标转换,转换到原始bmp图片上p''(u,v),并获取对应点的像素并保存至buffer中。

3.将buffer中保存的像素信息重新生成一张新的bmp图片,裁剪完成。

如下图所示:


任意矩形区域像素提取算法.PNG

坐标转换核心公式:

for(i=0;i<l;i++)
{
   for(j=0;j<w;j++)
   {
          u= x0 + (i-l/2)*sinθ - (j+w/2)*cosθ;
          v= y0 + (i-l/2)*cosθ - (j+w/2)*sinθ;
    }
}

//p'(i,j)表示需要提取像素子区域坐标系下任意一点。p''(u,v)表示将裁减区域内部坐标系转换到原始bmp图像上的坐标。

//p0(x0,y0)表示指定的裁剪基准点坐标,也就是裁剪矩形区域的中心点在原始bmp图像上的坐标。

//l表示需要裁剪矩形像素区域的宽度,w表示需要裁剪矩形区域的高度。

//θ表示需要裁剪矩形区域在水平方向上旋转的角度。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容