编辑代码

#include <stdio.h>
unsigned char buf1[16*24] ={0};
unsigned char buf2[16*24] ={0};
void StitchingAlgorithm(unsigned char xAll,unsigned char yAll,unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char *buf1,unsigned char *buf2);
int main () 
{
    StitchingAlgorithm(16,24,5,12,10,22,&buf1[0],&buf2[0]);
}


void StitchingAlgorithm(unsigned char xAll,unsigned char yAll,unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char *buf1,unsigned char *buf2)
{
 unsigned char temp = 0;
 unsigned int xDifference = 0, yDifference = 0;
 unsigned int  ystart =0,dataStart = 0;

 unsigned int i=0,j=0,k=0,w=0;

 memset(buf1,0,sizeof(buf1));

    if(yAll<8)
    {
        yAll = 1;
    }
    else
    {
    yAll = (yAll/8);  
    }
      
 dataStart = y2;

 xDifference = x2-x1;
 yDifference = y2-y1;
 

ystart = x1*yAll+ y1/8;    //求得每行起点在全图中的位置
printf("ystart %d\r",ystart);


    for(j=x1;j<(x2+1);j++)           //对块进行处理
    {
        ystart = x1*yAll+ y1/8;    //求得每行起点在全图中的位置
        x1++;
        temp = buf1[ystart];        //取数据进行填充
        w = y1%8 ;                 //每一行起点
        k = yDifference + w;       //每一行的终点                  
        for(i=w;i<(k+1); i++)      //对每行进行处理
        {
            if(i<8)                 //小于8位进行填充
            {
                temp |= 0x80 >> i;
                if( i == 7)        //最后一位进行数据的转移
                {
                    buf1[ystart++] = temp;
                    temp = buf1[ystart];        //取数据进行填充
                }
            }
            else                     //夸8位之后重置参数进行数据填充
            {
                temp = buf1[ystart];    //取数据进行填充
                i = 0;
                k = k-8;
                temp |= 0x80 >> i; 
            }
        }
        buf1[ystart++] = temp;             //针对于小于8位的数据转移
    }




    for(i=0;i<xAll*yAll;i++)
    {
    printf("buf1[%d] %d ",i,buf1[i]); 
    i++;
    printf("buf1[%d] %d \r",i,buf1[i]);     
    }
}