#include <SDL.h>
#include "SDL_rotozoom.h"
#include "SDL_image.h"
#include "math.h"
#include "string.h"
#include "SDL_gfxPrimitives.h"
/*
初始化SDL 函数库
SDL――INITEVERTHING 代表所有的 视频音频 图片 ...
*/
SDL_Surface * screen = NULL;
void Init()
{
if(SDL_Init(SDL_INIT_EVERYTHING)==-1)
{
printf("SDL_INITfault !\n");
exit(0);
}
}
// 创建屏幕 640*480 0 SDL_SWSURFACE
void Create_Screen(int width , int height , int bpp ,Uint32 flags)
{
//SDL_Surface*screen = NULL;
screen =SDL_SetVideoMode(width , height, bpp ,flags);
if(screen ==NULL)
{
printf("SDL_SetVideoModedefault !\n");
exit(1);
}
}
// 加载图片 传递文件的 绝对路径
SDL_Surface * Image_Load(char *filename)
{
SDL_Surface*image = NULL;
image =IMG_Load(filename);
if(image ==NULL)
{
printf("Theimage load default, maybe can't find %s !!!\n",filename);
exit(0);
}
return image;
}
void Free_Image(SDL_Surface * image)
{
SDL_FreeSurface(image);
}
//用来显示 image 图片,rect 可以调节位置
int Show_Image(SDL_Surface * image,SDL_Rect *rect)
{
SDL_BlitSurface(image, NULL , screen , rect);
SDL_UpdateRect(screen, 0 , 0 , 0 , 0 );
return 0;
}
SDL_Rect Set_Image(SDL_Surface *image ,double zoom)
{
//double x,y;
SDL_Rectrect;
rect.x = (screen->w - image->w ) / 2;
rect.y = (screen->h - image->h ) / 2;
return rect;
}
void Zoom_Small(double* x,SDL_Surface *image)
{
SDL_Rect rect;
if(*x <=0)
return ;
*x = *x-0.05;
SDL_Surface*image_1;
image_1 =zoomSurface(image , *x , *x, 1);
boxColor(screen,0, 0, screen->w, screen->h, 0x000000ff);
rect =Set_Image(image_1 , *x);
Show_Image(image_1,&rect);
Free_Image(image_1);
}
void Zoom_Big(double* x,SDL_Surface *image)
{
*x = *x + 0.05;
SDL_Rectrect;
SDL_Surface*image_1;
image_1 =zoomSurface(image , *x , *x, 1);
boxColor(screen,0, 0, screen->w, screen->h, 0x000000ff);
rect =Set_Image(image_1 , *x);
Show_Image(image_1,&rect);
Free_Image(image_1);
}
SDL_Surface *Change_Angle(SDL_Surface *image ,double*angle,double * x)
{
SDL_Surface*change = NULL;
SDL_Rectrect;
*angle =*angle -10.0;
boxColor(screen,0, 0, screen->w, screen->h, 0x000000ff);
change =rotozoomSurfaceXY(image, *angle, *x, *x, 1);
rect =Set_Image(change , *x);
Show_Image(change,&rect);
returnchange;
}
void Drav_Button(char *str , int flag)
{
if(strcmp(str, "left") == 0)
{
//boxColor(screen,160, 420 , 200, 460, 0xf3f5ffff);
if(flag== 1)
{
hlineColor(screen, 160 , 200 ,460 , 0x000000ff);
vlineColor(screen, 200 , 420 , 460 , 0x000000ff);
}
Show_Image(screen , &(screen->clip_rect) );
}
if(strcmp(str, "right") == 0)
{
boxColor(screen,438, 420 , 478, 460, 0xf3f5ffff);
if(flag== 1)
{
hlineColor(screen, 438 , 478 , 460, 0x000000ff);
vlineColor(screen, 478 , 420 , 460 , 0x000000ff);
}
Show_Image(screen , &(screen->clip_rect) );
}
return ;
}
int main()
{
SDL_Surface *image = NULL;
SDL_Surface *change = NULL;
int flag = 1;
doublezoom_xy = 1,angle = 0;
Init();
Create_Screen(640,480,0,SDL_SWSURFACE);
image =Image_Load("sheep4.jpg");
Show_Image(image,NULL);
printf("helloworld \n");
SDL_Eventevent;
while(flag)
{
while(SDL_PollEvent(&event)) //将事件加入事件队列队列
{
switch(event.type)
{
caseSDL_KEYDOWN:
printf("Thekey is %d\n",event.key.keysym.sym);
if(event.key.keysym.sym== SDLK_ESCAPE)
{
flag= 0;
}
if(event.key.keysym.sym== SDLK_SPACE)
{
printf("Thespace is down ... \n");
}
/* 事件中按 s 图片缩小 按b 放大 ,点击鼠标开始旋转
if(event.key.keysym.sym== 115)
{
printf("Theimage is become smaller !\n");
Zoom_Small(&zoom_xy,image);
printf("%lf\n",zoom_xy);
}
if(event.key.keysym.sym== 98)
{
printf("Theimage is become smaller !\n");
Zoom_Big(&zoom_xy,image);
printf("%lf\n",zoom_xy);
}
caseSDL_KEYUP:
{
}break;
caseSDL_MOUSEBUTTONDOWN:
Drav_Button("left", 0);
//circleColor(screen,320, 240, 240, 0x000000ff);
//change= rotozoomSurfaceXY(image, 90.0, 1, 1, 1);
//change= shrinkSurface(image,320,240);
//Show_Image(change,0);
Change_Angle(image,&angle,&zoom_xy);
//Drav_Button("right",0 );
break;
caseSDL_MOUSEBUTTONUP:
// Drav_Button("left" , 1);
//Drav_Button("right",1 );
break;
caseSDL_QUIT:
{
flag= 0;
}break;
}
}
}
Free_Image(image);
return 0;
}
Write by douyuan888 2012/12/30