mov 函数中使用了指针 b,但未对它赋值,它指向的内存是未知的,因此出错。
创新互联专业为企业提供微山网站建设、微山做网站、微山网站设计、微山网站制作等企业网站建设、网页设计与制作、微山企业网站模板建站服务,十年微山做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
要实现数据平移,比较简单的方法是先将它复制一份,再平移。这样, mov 函数可写为
void mov(int *x,int n,int m)
{
int *b, i, j;
b = (int *)calloc(n, sizeof(int));
if (b == NULL) {
printf("allocate memory failed!\n");
exit(0);
}
memcpy(b, x, n*sizeof(int));
for (i=0; in; i++) {
j = (i+n-m)%n;
x[i] = b[j];
}
free(b);
}
程序中用到了内存分配的函数及内存复制函数,因此需要包含 stdlib.h 和 string.h 库。
int a[8] = {xxxxxx};
int b[8];
int m;
int i, j = 0;
scanf("%d",m);
for(i = m;i8;i++)
{
b[j++] = a[i];
}
for(i = 0;im;i++)
{
b[j++] = a[i];
}
位图平移没有这方面的库函数,必须自己来实现,下面是位图平移的参考代码:
#include "stdafx.h"
#includewindows.h
#includestdio.h
#includemath.h
int _tmain(int argc, _TCHAR* argv[])
{
int width;
int height;
RGBQUAD *pTableColor;
unsigned char *pBmpBuf1,*pBmpBuf2;
BITMAPFILEHEADER bfhead;
BITMAPINFOHEADER bihead;
//读出源图像的信息
FILE *fpr=fopen("E:\\picture\\dog.bmp","rb");
if(fpr==0)
return 0;
fread(bfhead,14,1,fpr);
fread(bihead,40,1,fpr);
width=bihead.biWidth;
height=bihead.biHeight;
int LineByte=(width*8/8+3)/4*4;
pTableColor=new RGBQUAD[256];
fread(pTableColor,sizeof(RGBQUAD),256,fpr);
pBmpBuf1=new unsigned char[LineByte*height];
fread(pBmpBuf1,LineByte*height,1,fpr);
fclose(fpr);
//将处理后的图像赋值为白色
pBmpBuf2=new unsigned char[LineByte*height];
for(int i=0;iheight;i++)
for(int j=0;jwidth;j++)
{
unsigned char *p;
p=(unsigned char*)(pBmpBuf2+LineByte*i+j);
(*p)=255;
}
//左右平移功能的实现
int t;
printf("请输入左平移或右平移的大小t(左移t0,右移t0):");
scanf("%d",t);
int k=abs(t);
printf("%d",k);
if(t0)
{
if(t=(-width))
{
for(int i=0;iheight;i++)
for(int j=0;j(width-k);j++)
{
unsigned char *p1,*p2;
p1=pBmpBuf1+LineByte*i+j+k;
p2=pBmpBuf2+LineByte*i+j;
(*p2)=(*p1);
}
}
}
else
{
if(t=width)
{
for(int i=0;iheight;i++)
for(int j=k;jwidth;j++)
{
unsigned char *p1,*p2;
p1=pBmpBuf1+LineByte*i+j-k;
p2=pBmpBuf2+LineByte*i+j;
(*p2)=(*p1);
}
}
}
//保存处理后的图像
FILE *fpw=fopen("dog.bmp","wb");
fwrite(bfhead,14,1,fpw);
fwrite(bihead,40,1,fpw);
fwrite(pTableColor,sizeof(RGBQUAD),256,fpw);
fwrite(pBmpBuf2,LineByte*height,1,fpw);
fclose(fpw);
return 0;
}