#include <SDL.h>
#include "SDL_rotozoom.h"
#include "SDL_p_w_picpath.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*p_w_picpath = NULL;
p_w_picpath =IMG_Load(filename);
if(p_w_picpath ==NULL)
{
printf("Thep_w_picpath load default, maybe can't find %s !!!\n",filename);
exit(0);
}
return p_w_picpath;
}
void Free_Image(SDL_Surface * p_w_picpath)
{
SDL_FreeSurface(p_w_picpath);
}
//用来显示 p_w_picpath 图片,rect 可以调节位置
int Show_Image(SDL_Surface * p_w_picpath,SDL_Rect *rect)
{
SDL_BlitSurface(p_w_picpath, NULL , screen , rect);
SDL_UpdateRect(screen, 0 , 0 , 0 , 0 );
return 0;
}
SDL_Rect Set_Image(SDL_Surface *p_w_picpath ,double zoom)
{
//double x,y;
SDL_Rectrect;
rect.x = (screen->w - p_w_picpath->w ) / 2;
rect.y = (screen->h - p_w_picpath->h ) / 2;
return rect;
}
void Zoom_Small(double* x,SDL_Surface *p_w_picpath)
{
SDL_Rect rect;
if(*x <=0)
return ;
*x = *x-0.05;
SDL_Surface*p_w_picpath_1;
p_w_picpath_1 =zoomSurface(p_w_picpath , *x , *x, 1);
boxColor(screen,0, 0, screen->w, screen->h, 0x000000ff);
rect =Set_Image(p_w_picpath_1 , *x);
Show_Image(p_w_picpath_1,&rect);
Free_Image(p_w_picpath_1);
}
void Zoom_Big(double* x,SDL_Surface *p_w_picpath)
{
*x = *x + 0.05;
SDL_Rectrect;
SDL_Surface*p_w_picpath_1;
p_w_picpath_1 =zoomSurface(p_w_picpath , *x , *x, 1);
boxColor(screen,0, 0, screen->w, screen->h, 0x000000ff);
rect =Set_Image(p_w_picpath_1 , *x);
Show_Image(p_w_picpath_1,&rect);
Free_Image(p_w_picpath_1);
}
SDL_Surface *Change_Angle(SDL_Surface *p_w_picpath ,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(p_w_picpath, *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 *p_w_picpath = NULL;
SDL_Surface *change = NULL;
int flag = 1;
doublezoom_xy = 1,angle = 0;
Init();
Create_Screen(640,480,0,SDL_SWSURFACE);
p_w_picpath =Image_Load("sheep4.jpg");
Show_Image(p_w_picpath,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("Thep_w_picpath is become smaller !\n");
Zoom_Small(&zoom_xy,p_w_picpath);
printf("%lf\n",zoom_xy);
}
if(event.key.keysym.sym== 98)
{
printf("Thep_w_picpath is become smaller !\n");
Zoom_Big(&zoom_xy,p_w_picpath);
printf("%lf\n",zoom_xy);
}
caseSDL_KEYUP:
{
}break;
caseSDL_MOUSEBUTTONDOWN:
Drav_Button("left", 0);
//circleColor(screen,320, 240, 240, 0x000000ff);
//change= rotozoomSurfaceXY(p_w_picpath, 90.0, 1, 1, 1);
//change= shrinkSurface(p_w_picpath,320,240);
//Show_Image(change,0);
Change_Angle(p_w_picpath,&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(p_w_picpath);
return 0;
}
Write by douyuan888 2012/12/30