在这篇文章中主要讲述bitmap 被任意切割的话,如何将被切开的两块拿出来呢?
首先我们先看下图:
当一条直线AB 和蓝色部分如上图那样切割的话,我们将如何去拿出切看后的两个部分。
那么做法无疑是:
1. 将直线在bitmap 上标记起来,这里标记的好,可以将直线在bitmap 里的坐标记录下来,如果Bitmap中可以区分前景和背景色,那么就可以使用一种非前景活着背景色的颜色直接在bitmap上作标记。
当然这里的标记算法不可能使用数学上的解析几何的理论,那么就要使用图形学中的bresenham 直线生成算法,这样才能将bitmap 中的每个象素进行切割。
2.直线在图形上描绘出来了,那么我们如何扫描位图 ,才能取出来切割的部分,这个阶段就是要 确定扫描方式, 水平扫描 还是 垂直扫描。 这些就是这个 阶段要进行处理的。
如何确定扫描方式?不是没有办法,我们可以借助区域直线裁减算法,给直线AB进行裁减 ,裁减的大小是比位图略大,图中的那个 红色的框,那么将和直线AB相交为CD,分别给C 和D 进行区域编码,就可以确定C,和 D在那个区域了,只要确定了区域,那么 就可以进行确定扫描方式了。
3. 按已确定的扫描方式将bitmap 中的像素搬到一个新的空间,这样就可以形成两个bitmap了。如上图: 根据2 步可以确定为水平扫描,那么对待bitmap从左到右,依次进行像素的搬家直到遇到直线像素点的时候, 进行下一行像素的搬家。
4.按新空间的像素和余下来的像素分别创建bitmap 即可。
后面我会详细说明Bresenham 直线生成算法,区域裁减算法,bitmap 生成算法等。
首先我们先看下图:
当一条直线AB 和蓝色部分如上图那样切割的话,我们将如何去拿出切看后的两个部分。
那么做法无疑是:
1. 将直线在bitmap 上标记起来,这里标记的好,可以将直线在bitmap 里的坐标记录下来,如果Bitmap中可以区分前景和背景色,那么就可以使用一种非前景活着背景色的颜色直接在bitmap上作标记。
当然这里的标记算法不可能使用数学上的解析几何的理论,那么就要使用图形学中的bresenham 直线生成算法,这样才能将bitmap 中的每个象素进行切割。
2.直线在图形上描绘出来了,那么我们如何扫描位图 ,才能取出来切割的部分,这个阶段就是要 确定扫描方式, 水平扫描 还是 垂直扫描。 这些就是这个 阶段要进行处理的。
如何确定扫描方式?不是没有办法,我们可以借助区域直线裁减算法,给直线AB进行裁减 ,裁减的大小是比位图略大,图中的那个 红色的框,那么将和直线AB相交为CD,分别给C 和D 进行区域编码,就可以确定C,和 D在那个区域了,只要确定了区域,那么 就可以进行确定扫描方式了。
3. 按已确定的扫描方式将bitmap 中的像素搬到一个新的空间,这样就可以形成两个bitmap了。如上图: 根据2 步可以确定为水平扫描,那么对待bitmap从左到右,依次进行像素的搬家直到遇到直线像素点的时候, 进行下一行像素的搬家。
4.按新空间的像素和余下来的像素分别创建bitmap 即可。
后面我会详细说明Bresenham 直线生成算法,区域裁减算法,bitmap 生成算法等。