C言語の入門(初心者)11rotate.c 061213 画像回転 | 新明解だいがく生かつ辞典 -反省堂- 風の谷の13番目の大学生

C言語の入門(初心者)11rotate.c 061213 画像回転

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MS 200
#define PI 3.14159265358979
void rotate(unsigned char*,int);
main()
{
char fi[50];
int i,j,t;
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(MS*MS*3);
for(i=0;i<MS*MS;++i)
{ bmp[i*3+0]=0;
bmp[i*3+1]=0;
bmp[i*3+2]=0;}
printf("Input rotate angle : ");
scanf("%s",fi);
t=atoi(fi);
for(i=75;i<=124;++i){
for(j=75;j<=124;++j)
{ bmp[(i*MS+j)*3+0]=230;
bmp[(i*MS+j)*3+1]=230;
bmp[(i*MS+j)*3+2]=230;}}
rotate(bmp,t);
printf("Input file name:");
scanf("%s",fi);
if((fp = fopen ( fi,"wb"))==NULL){
fprintf(stderr,"Error:file open[%s].\n",fi);
exit(1); }else{
fwrite(header,2,13,fp);
fwrite(bmp,1,MS*MS*3,fp);
fclose(fp);}}
void rotate(unsigned char *b,int t)
{ int i,j,x,y,x1,y1;
double th,si,co;
unsigned char *a;
a=(unsigned char*)malloc(MS*MS*3);
th=t*PI/180.0;
si=sin(th);
co=cos(th);
for(i=0;i<MS*MS;++i){
a[i*3+0]=0;
a[i*3+1]=0;
a[i*3+2]=0;}
for(i=0;i<MS;++i){
y=i-MS/2;
for(j=0;j<MS;++j){
x=j-MS/2;
x1=x*co+y*si+MS/2+0.5;
y1=-x*si+y*co+MS/2+0.5;
if((x1<0||x1>MS-1)||(y1<0||y1>MS-1))continue;
a[(i*MS+j)*3+0]=b[(y1*MS+x1)*3+0];
a[(i*MS+j)*3+1]=b[(y1*MS+x1)*3+1];
a[(i*MS+j)*3+2]=b[(y1*MS+x1)*3+2];}}
for(i=0;i<MS*MS*3;i++){
b[i]=a[i];}
free(a);}



画像回転 c言語, エクセル 画像回転, java rotate , rotate me, ゆいこ rotate