代码如下:
#include <stdio.h> #include <stdlib.h> #define PICWIDTH 24 /* 原始图片大小:宽*高 */ #define PICHEIGHT 12 #define SLICEWID 4 /* 切割生成的新的小图片的大小:宽*高 */ #define SLICEHEI 3 void display(char *, int, int); int main(int argc, char **argv) { int width = PICWIDTH; int height = PICHEIGHT; int A = (int)(width/SLICEWID); int B = (int)(height/SLICEHEI); char m[PICWIDTH*PICHEIGHT] = ""; /* 存储原来图像的每个象素 */ char temp[SLICEWID * SLICEHEI]; /* 存储切割生成的小图像的每个象素 */ char * py; int row_flag, line_flag, i, j; int indes = 0; int t = 0; if(PICWIDTH%SLICEWID || PICHEIGHT%SLICEHEI) { printf("图像不能被正确分割,请修改设置值!/n原图大小:%d*%d,切图大小:%d*%d/n", PICWIDTH, PICHEIGHT, SLICEWID, SLICEHEI); exit(0); } for(t = 0 ; t < PICWIDTH * PICHEIGHT; t++) m[t] = 65 + t%PICWIDTH + t/PICWIDTH; display(m, PICWIDTH, PICHEIGHT); py = m; for (row_flag = 0; row_flag < B; ++row_flag) { for (line_flag = 0; line_flag < A; ++line_flag) { for (j = 0; j < SLICEHEI; j++) { for (i = 0; i < SLICEWID; i++) { t = (((row_flag * SLICEHEI + j) * PICWIDTH) + i + SLICEWID * line_flag); py = m + t; temp[indes] = *py; indes++; if (indes >= SLICEWID * SLICEHEI) indes = 0; } } display(temp, SLICEWID, SLICEHEI); /* 显示每个分割出来的小图象 */ } } return 0; } void display(char * s, int w, int h) { int i; for(i = 0; i < w * h; i++) { if(!(i%w)) printf("/n"); printf("%c", s[i]); } printf("/n"); } |
这个程序将一个PICWIDTH*PICHEIGHT的大图片分割成SLICEWID*SLICEHEI大小的一些小图片。
如上图所示的背景图片,其实是一些点的集合,总共多少个点呢?PICWIDTH*PICHEIGHT个
在计算机上存储的时候必然把这些点的信息一行一行地保存到文件中。
当我们想要把这个图象用图中的绿、红两条线切割为几块时,其实就是通过一定的算法取出保存在文件中的点的信息,再拼到一个图片中显示出来。