📄 mixscramble.c~
字号:
/********************************************************************
*
* image mixscramble tool
*
********************************************************************/#include <tina/all_tina.h>#include "bmp.h"static int SCRAM_n = 1;static Tv *tv = NULL;static Tv *tv1=NULL;#define MAXPATHLEN 64static char directory_name[MAXPATHLEN];static char file_name[MAXPATHLEN];static char pathname[MAXPATHLEN];
static void *pdir=0, *pfile=0;static int scram_method = 0;static char filename[MAXPATHLEN];static Imrect *orig_im =NULL;static Imrect *dest_im = NULL;static void scram_choice_proc(int val)
{
scram_method = val;
}static Imrect *read_image(void){ Imrect *srcIm;/*----------------Read the image---------------------------*/ (void) strip_spaces(file_name); (void) strip_spaces(directory_name); (void) string_append(pathname, directory_name, "/", file_name, NULL); srcIm = ReadGIF(pathname, 1);/*------------------------------------------------*/ return(srcIm);}static void mypush_proc(void){ Imrect *srcIm,*srcIm0; int width, height;
Imregion *roi; int i,j; //BYTE pix; float pix; srcIm = read_image(); width = srcIm->width;
height = srcIm->height;
roi = srcIm->region;
if (roi == NULL) return ; srcIm0 = im_alloc( height, width, roi, float_v ); for(i = 0;i < height; i ++) for(j = 0;j < width; j++) { IM_PIX_GET(srcIm, i, j, pix);
IM_PIX_SET(srcIm0, i, j, pix); } mono_image_set(srcIm0);
stack_push(srcIm0, IMRECT, im_free);}static Imrect* mypop_proc(void){ Imrect *srcIm; //BYTE pix; float pix; int type; if (stack_check_types(IMRECT, NULL) == false)
{
error("mixTransformation : wrong types on stack", warning);
return;
} srcIm = (Imrect *) stack_pop(&type); return srcIm;}static void mysave_proc(void){ int type; int width, height;
Imregion *roi; Imrect *srcIm,*srcIm0; int i,j; //BYTE pix; float pix; if (stack_check_types(IMRECT, NULL) == false)
{
error("mixTransformation : wrong types on stack", warning);
return;
} srcIm = (Imrect *) stack_pop(&type); width = srcIm->width;
height = srcIm->height;
roi = srcIm->region;
if (roi == NULL) return ; srcIm0 = im_alloc( height, width, roi, float_v ); for(i = 0;i < height; i ++) for(j = 0;j < width; j++) { IM_PIX_GET(srcIm, i, j, pix);
IM_PIX_SET(srcIm0, i, j, pix); } strcat(filename,".gif"); printf("saved the image :%s\n",filename); gif_write_file(srcIm0,filename); mono_image_set(srcIm0);
stack_push(srcIm0, IMRECT, im_free);}static void reset_proc(void){ strcpy(filename,"result/mixscramble/"); strcat(filename,file_name); mypop_proc();}static void Trans_proc(void){ Imrect *srcIm,*destIm,*tmpIm,*srcIm0;
int width, height;
Imregion *roi; int i,j,k; int type;
//BYTE pix; float pix; if (stack_check_types(IMRECT, NULL) == false)
{
error("mixTransformation : wrong types on stack", warning);
return;
} srcIm = (Imrect *) stack_pop(&type); //srcIm = read_image();
width = srcIm->width;
height = srcIm->height;
roi = srcIm->region;
if (roi == NULL) return ; orig_im = im_copy(srcIm); tv_imrect2(tv, orig_im); char filename0[64]; char string[25]; strcpy(filename0,"+");/*------------------------------------------------*/ int **trans_r, **trans_c;
trans_r = int_matrix(height, width);
trans_c = int_matrix(height, width); switch( scram_method )
{
case 0:
fibonacci_matrix(trans_r, trans_c, height, width); strcat(filename0, "fibonacci_");
break;
case 1:
arnold_matrix(trans_r, trans_c, height, width); strcat(filename0, "arnold_");
break;
case 2:
qatlig_matrix(trans_r, trans_c, height, width); strcat(filename0, "qatlig_");
break;
case 3:
hilbert_matrix(trans_r, trans_c, height, width); strcat(filename0, "hilbert_");
break;
case 4:
convey_matrix(trans_r, trans_c, height, width); strcat(filename0, "convey_");
break;
case 5:
latin_matrix(trans_r, trans_c, height, width); strcat(filename0, "latin_");
break;
case 6:
graycode_matrix(trans_r, trans_c, height, width); strcat(filename0, "graycode_");
break;
case 7:
baker_matrix(trans_r, trans_c, height, width); strcat(filename0, "baker_");
break;
case 8:
logistic_matrix(trans_r, trans_c, height, width); strcat(filename0, "logistic_");
break;
case 9:/*
sampling_matrix(trans_r, trans_c, height, width); strcat(filename0, "sampling_");*/ random_matrix(trans_r, trans_c, height, width); strcat(filename0, "random_");
break;
default:
break;
}/*------------------------------------------------*/
printf("\n=== %sTransformation begin: ===\n",filename0); destIm = im_alloc( height, width, roi, float_v ); srcIm0 = im_alloc( height, width, roi, float_v ); for(i = 0;i < height; i ++) for(j = 0;j < width; j++) { IM_PIX_GET(srcIm, i, j, pix);
IM_PIX_SET(srcIm0, i, j, pix); //printf("%f ",pix); }
for( k = 0; k < SCRAM_n; k++)
{ for (i = 0; i < height ; i++)
{
for (j = 0; j< width ; j++)
{ IM_PIX_GET(srcIm0, i, j, pix);
IM_PIX_SET(destIm, trans_r[i][j], trans_c[i][j], pix);
}
}
tmpIm = srcIm0;
srcIm0 = destIm;
destIm = tmpIm; }/*----------------------Save the image as .gif--------------------------*/ gcvt(k,5,string); printf("scrambled %s times\n",string); strcat(filename, filename0); strcat(filename, string);/*------------------------------------------------*/ dest_im = im_copy(srcIm0); tv_imrect2(tv1, dest_im); mono_image_set(srcIm0);
stack_push(srcIm0, IMRECT, im_free); im_free(destIm); free_int_matrix(trans_r, height);
free_int_matrix(trans_c, height); printf("=== %stransformatioin complete! ===\n",filename0); }static void Contra_Trans_proc(void){ Imrect *srcIm,*destIm,*tmpIm,*srcIm0;
int width, height;
Imregion *roi; int i,j,k; int type;
//BYTE pix; float pix; if (stack_check_types(IMRECT, NULL) == false)
{
error("Contra_Trans : wrong types on stack", warning);
return;
} srcIm = (Imrect *) stack_pop(&type); //srcIm = read_image();
width = srcIm->width;
height = srcIm->height;
roi = srcIm->region;
if (roi == NULL) return ; orig_im = im_copy(srcIm); tv_imrect2(tv, orig_im); char filename0[64]; char string[25]; strcpy(filename0,"+Contra_");/*------------------------------------------------*/ int **trans_r, **trans_c;
trans_r = int_matrix(height, width);
trans_c = int_matrix(height, width); switch( scram_method )
{
case 0:
r_fibonacci_matrix(trans_r, trans_c, height, width);; strcat(filename0, "fibonacci_");
break;
case 1:
r_arnold_matrix(trans_r, trans_c, height, width); strcat(filename0, "arnold_");
break;
case 2:
r_qatlig_matrix(trans_r, trans_c, height, width); strcat(filename0, "qatlig_");
break;
case 3:
r_hilbert_matrix(trans_r, trans_c, height, width); strcat(filename0, "hilbert_");
break;
case 4:
r_zigzag_matrix(trans_r, trans_c, height, width); strcat(filename0, "zigzag_");
break;
case 5: r_convey_matrix(trans_r, trans_c, height, width); strcat(filename0, "convey_");
break;
case 6:
r_graycode_matrix(trans_r, trans_c, height, width); strcat(filename0, "graycode_");
break;
case 7:
r_baker_matrix(trans_r, trans_c, height, width); strcat(filename0, "baker_");
break;
case 8:
r_logistic_matrix(trans_r, trans_c, height, width); strcat(filename0, "logistic_");
break;
case 9:/*
r_sampling_matrix(trans_r, trans_c, height, width); strcat(filename0, "sampling_");*/ r_random_matrix(trans_r, trans_c, height, width); strcat(filename0, "random_");
break;
default:
break;
}/*------------------------------------------------*/
printf("\n=== %sTransformation begin: ===\n",filename0); destIm = im_alloc( height, width, roi, float_v ); srcIm0 = im_alloc( height, width, roi, float_v ); for(i = 0;i < height; i ++) for(j = 0;j < width; j++) { IM_PIX_GET(srcIm, i, j, pix);
IM_PIX_SET(srcIm0, i, j, pix); }
for( k = 0; k < SCRAM_n; k++)
{ for (i = 0; i < height ; i++)
{
for (j = 0; j< width ; j++)
{ IM_PIX_GET(srcIm0, i, j, pix);
IM_PIX_SET(destIm, trans_r[i][j], trans_c[i][j], pix);
}
}
tmpIm = srcIm0;
srcIm0 = destIm;
destIm = tmpIm; }/*----------------------Save the image as .gif--------------------------*/ gcvt(k,5,string); printf("Contra_scrambled %s times\n",string); strcat(filename, filename0); strcat(filename, string);/*------------------------------------------------*/ dest_im = im_copy(srcIm0); tv_imrect2(tv1, dest_im); mono_image_set(srcIm0);
stack_push(srcIm0, IMRECT, im_free); im_free(destIm); free_int_matrix(trans_r, height);
free_int_matrix(trans_c, height); printf("=== %stransformatioin complete! ===\n",filename0);}static void fulldrawo(Tv *tv){ tv_imrect2(tv, orig_im);}static void fulldrawd(Tv *tv){ tv_imrect2(tv, dest_im);}static void tv_choice_proc(choice)
int choice;
{
switch (choice)
{
case 0: tv_set_next(tv);
break;
case 1: tv_set_next(tv1);
break;
default:error("tv_choice_proc: unknown choice\n", warning);
break;
}}static void scan_proc(void){ scan_files(directory_name,file_name); tw_sglobal_reset(pdir); tw_sglobal_reset(pfile);}static void tool_proc(void)
{
static int x = 200, y = 0;
static int xr = 0, yr = 0;
tv_tool(x+xr, y+yr);
xr += 275;
yr += 0;
if (x+xr>780)
{
xr = yr = 0;
y += 50;
}
if (y>400) y = 200;
}
/********** Tool creation **********/
void mixscramble_tool(int x, int y)
{
static void *tool = NULL; if (tool)
{
tw_show_tool(tool);
return;
}
tool = (void *)tw_tool("Image mixscramble tool", x, y);
/* Initialise pathname from environment variable (or #define) */ (void) environ_pathname_get(directory_name, file_name, "TINA_IMAGE_DEFAULT", "/home/wzz/newimscramdegree/result/mixscramble/Lena.gif");
tw_choice("Tv choice", tv_choice_proc, 0, "original","scrambled", NULL); tv = tv_create("mixTransformation original");
tv1 = tv_create("mixTransformation scrambled"); tv_set_fulldraw(tv, fulldrawo); tv_set_fulldraw(tv1,fulldrawd); /*---------------------------*/ tw_newrow();
tw_label("Display");
tw_button("New Tvtool", tool_proc, NULL); /*---------------------------*/ tw_newrow(); pdir = (void *) tw_sglobal("Directory:", directory_name, 32); tw_button("scan", scan_proc, NULL); tw_newrow(); pfile = (void*) tw_sglobal("File:", file_name, 32); tw_newrow(); /*---------------------------*/ tw_button("push",mypush_proc,NULL); tw_button("pop",mypop_proc,NULL);
tw_button("save",mysave_proc,NULL); tw_newrow(); strcpy(filename,"result/mixscramble/"); strcat(filename,file_name);
tw_choice("Scrambling Method:", scram_choice_proc, 0,\
"Fibonacci", "Arnold", "QATLIG", "Hilbert", "Zigzag","Convey", "GrayCode", "Baker", "Logistic", "Random", NULL);
tw_newrow(); tw_iglobal("Scrambling times = ", &SCRAM_n, 5); tw_newrow(); tw_button("Transformation",Trans_proc,NULL); tw_button("Contra-Transformation",Contra_Trans_proc,NULL); tw_button("reset",reset_proc,NULL); tw_newrow();
tw_end_tool();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -