新明解だいがく生かつ辞典 -反省堂- 風の谷の13番目の大学生 -352ページ目

C言語の入門(初心者)11move.c 061213 移動

#include <stdio.h>
#include <stdlib.h>
#define MS 200
void move( unsigned char *, int, int );
main()
{
char fi[50];
int i, j;
FILE *fp;
unsigned short header[13] = {0x4d42, 54490, 1, 0, 0, 26, 0, 12, 0, 200, 200, 1, 24};
unsigned char *bmp;
bmp=(unsigned char *)malloc(200*200*3);
for(i = 0;i<MS*MS-1;i++){
bmp[i*3+0]=255;
bmp[i*3+1]=0;
bmp[i*3+2]=0;
}
for(i = 75;i<124;i++){
for(j = 75;j<124;j++){
bmp[(i*MS+j)*3+0]=0;
bmp[(i*MS+j)*3+1]=0;
bmp[(i*MS+j)*3+2]=255;
}}
move(bmp,30,60);
printf("Input file name:");
scanf("%s",fi);
if(NULL==(fp =fopen(fi,"wb"))){
fprintf(stderr,"Error:file open[%s].\n",fi);
exit(1);
}
fwrite(header,2,13,fp);
fwrite(bmp,1,200*200*3,fp);
}

void move( unsigned char *b, int x0, int y0 )
{
int i, j, x, y;
unsigned char *a;
a = ( unsigned char *) malloc( MS*MS*3 );

for ( i = 0 ; i < MS*MS-1 ; i++ ) {
a[i*3+0]=255;
a[i*3+1]=0;
a[i*3+2]=0;
}
for ( i = 0 ; i < MS ; i++ ) {
y=i-y0;
if(0>y||y>MS)continue;
for ( j = 0 ; j < MS ; j++ ) {
x=j-x0;
if(0>x||x>MS)continue;
a[(i*MS+j)*3+0] = b[(y*MS+x)*3+0];
a[(i*MS+j)*3+1] = b[(y*MS+x)*3+1];
a[(i*MS+j)*3+2] = b[(y*MS+x)*3+2];
}
}
for(i = 0;i<MS*MS*3-1;i++){
b[i]=a[i];
}
free ( a );
}




c言語 move fan, move bmp, move on, 画像移動, ムーブ カスタム, move fun, free move, move conte, move wiki, move custom