Example #1
0
/**
 * 建立 src 图像的亮度,饱和度版本
 *
 * @param src 源图像
 * @param saturation 饱合度 -100(灰度图像) 至 100(高彩色比图像)
 * @param brightness 亮度 -100(全黑) 至 100(全白)
 */
image_p create_saturation_brightness_image(image_p src, int saturation, int brightness)
{
	uint32_t y,x;
	image_p pimg;
	uint16_t *p16,*psrc16;
	uint32_t *p32,*psrc32;

	if(saturation<-100 || saturation>100)
	{
		nge_print("create_gray_image arg 'saturation' must between -100 to 100!");
		return NULL;
	}

	if(brightness<-100 || brightness>100)
	{
		nge_print("create_gray_image arg 'brightness' must between -100 to 100!");
		return NULL;
	}
	CHECK_AND_UNSWIZZLE(src);
	pimg = image_create(src->w, src->h, src->dtype);

	if(src->dtype == DISPLAY_PIXEL_FORMAT_8888)
	{
		p32 = (uint32_t *)pimg->data;
		psrc32 = (uint32_t *)src->data;

		for(y=0;y<src->h;y++)
		{
			p32 += src->texw;
			psrc32 += src->texw;

			for(x=0;x<src->w;x++)
			{
				*(p32 + x) = (uint32_t)get_saturation_brightness_color(pimg->dtype, *(psrc32 + x), saturation, brightness);
			}
		}
	}
	else if (src->dtype == DISPLAY_PIXEL_FORMAT_4444)
	{
		p16 = (uint16_t *)pimg->data;
		psrc16 = (uint16_t *)src->data;

		for(y=0;y<src->h;y++)
		{
			p16 += src->texw;
			psrc16 += src->texw;

			for(x=0;x<src->w;x++)
			{
				*(p16 + x) = (uint16_t)get_saturation_brightness_color(pimg->dtype, *(psrc16 + x), saturation, brightness);
			}
		}
	}

	CHECK_AND_SWIZZLE(src);

	return pimg;
}
Example #2
0
static void   dir_scan(const char* path,const char* file,file_travel_cb callback,void* user_data)
{
	struct   stat   s;
	DIR           *dir;
	struct   dirent   *dt;
	char   dirname[256];
	dir_desc_t  dir_entry;
	memset(dirname,   0,   256);
	strncpy(dirname,path,256);

	if(stat(file,   &s)   <   0){
		nge_print("stat   error!\n");
		return;
	}
	if(S_ISDIR(s.st_mode)){
		strcpy(dirname+strlen(dirname),   file);
		strcpy(dirname+strlen(dirname),   "/");
		if((dir   =   opendir(file))   ==   NULL){
			nge_print("opendir   %s   error!\n",file);
			return;
		}
		if(chdir(file)   <   0)   {
			nge_print("chdir   error!\n");
			return;
		}
		while((dt   =   readdir(dir))   !=   NULL){
			if(dt->d_name[0]   ==   '.'){
				continue;
			}
			dir_scan(dirname,dt->d_name, callback,user_data);
		}
		if(chdir("..")   <   0){
			nge_print("chdir   error!\n");
			return;
		}
		closedir(dir);
		memset(&dir_entry,0,sizeof(dir_desc_t));
		sprintf(dir_entry.name,"%s",dirname);
		if(dir_entry.name[strlen(dir_entry.name)-1]=='/'){
			dir_entry.name[strlen(dir_entry.name)-1]= 0;
			if((strcmp(dir_entry.name,file)==0)&&(strlen(dir_entry.name)==strlen(file))){
				//current dir ommited
				return;
			}
			dir_entry.flag = FIO_F_DIR;
			callback(&dir_entry,user_data);

		}

	}else{
		memset(&dir_entry,0,sizeof(dir_desc_t));
		sprintf(dir_entry.name,"%s%s",dirname,file);
		dir_entry.flag = FIO_F_FILE;
		callback(&dir_entry,user_data);
	}
}
/**
 * 建立 src 图像的亮度,饱和度版本
 *
 * @param src 源图像
 * @param saturation 饱合度 -100(灰度图像) 至 100(高彩色比图像)
 * @param brightness 亮度 -100(全黑) 至 100(全白)
 */
image_p create_saturation_brightness_image(image_p src, int saturation, int brightness)
{
	uint32 y,x;
	uint8 recover = 0;
	image_p pimg;
	uint16 *p16,*psrc16;
	uint32 *p32,*psrc32;

	if(saturation<-100 || saturation>100)
	{
		nge_print("create_gray_image arg 'saturation' must between -100 to 100!");
		return NULL;
	}

	if(brightness<-100 || brightness>100)
	{
		nge_print("create_gray_image arg 'brightness' must between -100 to 100!");
		return NULL;
	}
	if(src->swizzle ==1){
		unswizzle_swap(src);
		recover = 1;
	}
	pimg = image_create(src->w, src->h, src->dtype);
	
	for(y=0;y<src->h;y++)
	{
		if(src->dtype == DISPLAY_PIXEL_FORMAT_8888)
		{
			p32 = (uint32 *)pimg->data + y*src->texw;
			psrc32 = (uint32 *)src->data + y*src->texw;
		}
		else
		{
			p16 = (uint16 *)pimg->data + y*src->texw;
			psrc16 = (uint16 *)src->data + y*src->texw;
		}
		
		for(x=0;x<src->w;x++)
		{
			if(src->dtype == DISPLAY_PIXEL_FORMAT_8888)
			{
				*(p32 + x) = (uint32)get_saturation_brightness_color(pimg->dtype, *(psrc32 + x), saturation, brightness);
			}
			else
			{
				*(p16 + x) = (uint16)get_saturation_brightness_color(pimg->dtype, *(psrc16 + x), saturation, brightness);
			}
		}
	}
	if(recover)
		swizzle_swap(src);

	return pimg;
}
Example #4
0
	void Java_org_libnge_nge2_NGE2_nativeSetContext(JNIEnv* env,
        jobject thiz,jint w,jint h)
	{
		NGE_SetScreenContext("NGE2A",w,h,32,1);
		nge_print("screenW:%d,screenH:%d",w,h);

		screen = GetScreenContext();
	}
Example #5
0
	void Java_org_libnge_nge2_NGE2_nativeInitialize(JNIEnv* env,
            jobject thiz )
	{
		if(sInstant == NULL)
			sInstant = LoadApp();
		sInstant->Init();
		nge_print("nge2 init normaly.\n");
	}
Example #6
0
	void Java_org_libnge_nge2_NGE2_nativePause(JNIEnv* env,
            jobject thiz )
	{
		// do nothing for now
		nge_print("Paused.\n");
		sPaused = 1;
		sResume = 0;
		sInstant->Pause();
	}
Example #7
0
	void Java_org_libnge_nge2_NGE2_nativeResetContext(JNIEnv* env,
																 jobject thiz )
		{
			//if(sResume) {
				nge_print("nge2 reset graphics.\n");
				nge_graphics_reset();
				//sResume = 0;
			//}
		}
Example #8
0
	void Java_org_libnge_nge2_NGE2_nativeResume(JNIEnv* env,
            jobject thiz )
	{

		sPaused = 0;
		sResume = 1;
		nge_print("Resume.\n");
		sInstant->Resume();
	}
Example #9
0
	void Java_org_libnge_nge2_NGE2_nativeSetWorkPath(JNIEnv* env,
	        jobject thiz,jstring packname)
	{
			screen = GetScreenContext();
			char* name = jstringTostring(env, packname);
			chdir(name);
			nge_print("nge2 set workpath:%s.\n",name);
			memset(screen->pathname,0,256);
			strncpy(screen->pathname,name,256);
			if(name)
				free(name);
			
	}
Example #10
0
int init() {
	//初始化NGE分为VIDEO,AUDIO,这里是只初始化VIDEO,如果初始化所有用INIT_VIDEO|INIT_AUDIO,或者INIT_ALL
	NGE_Init(INIT_VIDEO);
	//初始化按键处理btn_down是按下响应,后面是弹起时的响应,0是让nge处理home消息(直接退出),填1就是让PSP系统处理
	//home消息,通常填1正常退出(1.50版的自制程序需要填0)
#ifdef NGE_INPUT_BUTTON_SUPPORT
	InitInput(btn_down,NULL,1);
#endif
	//最后一个参数是psp swizzle优化,通常填1
	p_bg = image_load(RES_PATH("images/demo0.jpg"),DISPLAY_PIXEL_FORMAT_8888,1);
	if(p_bg == NULL) {
		nge_print("can not open file\n");
	}
	p_logo = image_load(RES_PATH("images/nge2logo.png"),DISPLAY_PIXEL_FORMAT_4444,1);
	if(p_logo == NULL) {
		nge_print("can not open file\n");
	}
	//创建一个半透明的图片遮罩color
	logomask1 = CreateColor(255,255,255,128,p_logo->dtype);
	//随便创建一个图片遮罩color
	logomask2 = CreateColor(100,100,100,255,p_logo->dtype);
	return 0;
}
/**
 * 建立 src 图像的灰度版本
 * 
 * @param src 源图像
 * @param gray 灰度 0 到 100, 0 为源图像, 100 为纯灰色图像
 */
image_p create_gray_image(image_p src, int gray)
{
	uint32 y,x;
	uint8 recover = 0;
	image_p pimg;
	uint16 *p16,*psrc16;
	uint32 *p32,*psrc32;

	if(gray<0 || gray>100)
	{
		nge_print("create_gray_image arg 'gray' must between 0 to 100!");
		return NULL;
	}
	if(src->swizzle ==1){
		unswizzle_swap(src);
		recover = 1;
	}
	pimg = image_create(src->w, src->h, src->dtype);
	
	for(y=0;y<src->h;y++)
	{
		if(src->dtype == DISPLAY_PIXEL_FORMAT_8888)
		{
			p32 = (uint32 *)pimg->data + y*src->texw;
			psrc32 = (uint32 *)src->data + y*src->texw;
		}
		else
		{
			p16 = (uint16 *)pimg->data + y*src->texw;
			psrc16 = (uint16 *)src->data + y*src->texw;
		}
		
		for(x=0;x<src->w;x++)
		{
			if(src->dtype == DISPLAY_PIXEL_FORMAT_8888)
			{
				*(p32 + x) = (uint32)get_gray_color(pimg->dtype, *(psrc32 + x), gray);
			}
			else
			{
				*(p16 + x) = (uint16)get_gray_color(pimg->dtype, *(psrc16 + x), gray);
			}
		}
	}
	if(recover)
		swizzle_swap(src);

	return pimg;
}
Example #12
0
int init() {
	//初始化NGE分为VIDEO,AUDIO,这里是只初始化VIDEO,如果初始化所有用INIT_VIDEO|INIT_AUDIO,或者INIT_ALL
	NGE_Init(INIT_VIDEO);
	//初始化按键处理btn_down是按下响应,后面是弹起时的响应,0是让nge处理home消息(直接退出),填1就是让PSP系统处理
	//home消息,通常填1正常退出(1.50版的自制程序需要填0)
#ifdef NGE_INPUT_BUTTON_SUPPORT
	InitInput(btn_down,NULL,1);
#endif
	//最后一个参数是psp swizzle优化,通常填1
	p_logo = image_load(RES_PATH("images/nge2logo.png"),DISPLAY_PIXEL_FORMAT_8888,1);
	if(p_logo == NULL) {
		nge_print("can not open file\n");
	}
	p_par = image_load(RES_PATH("par/particles.png"),DISPLAY_PIXEL_FORMAT_8888,1);
	if(p_par == NULL) {
		nge_print("can not open file\n");
	}
	//设置sprite子图
	mParticle = (sprite_p)malloc(sizeof(sprite_t));
	memset(mParticle,0,sizeof(sprite_t));
	mParticle->sprite_image = p_par;
	mParticle->sprite_clip.left= 0.0f;
	mParticle->sprite_clip.top= 0.0f;
	mParticle->sprite_clip.right= 32.0f;
	mParticle->sprite_clip.bottom = 32.0f;
	mParticle->sprite_center.x = 16.0f;
	mParticle->sprite_center.y = 16.0f;

	mParticleSys = new hgeParticleSystem(RES_PATH("par/particle1.psi"), mParticle);
	mParticleSys->MoveTo(480.0f/2, 272.0f/2,0);
	mParticleSys->Fire();
	timer = timer_create();
	timer->start(timer);

	return 0;
}
Example #13
0
/**
 * 建立 src 图像的灰度版本
 *
 * @param src 源图像
 * @param gray 灰度 0 到 100, 0 为源图像, 100 为纯灰色图像
 */
image_p create_gray_image(image_p src, int gray)
{
	uint32_t y,x;
	image_p pimg;
	uint16_t *p16 = NULL,*psrc16 = NULL;
	uint32_t *p32 = NULL,*psrc32 = NULL;

	if(gray<0 || gray>100)
	{
		nge_print("create_gray_image arg 'gray' must between 0 to 100!");
		return NULL;
	}
	CHECK_AND_UNSWIZZLE(src);
	pimg = image_create(src->w, src->h, src->dtype);

	for(y=0;y<src->h;y++)
	{
		if(src->dtype == DISPLAY_PIXEL_FORMAT_8888)
		{
			p32 = (uint32_t *)pimg->data + y*src->texw;
			psrc32 = (uint32_t *)src->data + y*src->texw;
		}
		else
		{
			p16 = (uint16_t *)pimg->data + y*src->texw;
			psrc16 = (uint16_t *)src->data + y*src->texw;
		}

		for(x=0;x<src->w;x++)
		{
			if(src->dtype == DISPLAY_PIXEL_FORMAT_8888)
			{
				*(p32 + x) = (uint32_t)get_gray_color(pimg->dtype, *(psrc32 + x), gray);
			}
			else
			{
				*(p16 + x) = (uint16_t)get_gray_color(pimg->dtype, *(psrc16 + x), gray);
			}
		}
	}
	CHECK_AND_SWIZZLE(src);

	return pimg;
}
Example #14
0
image_p image_load_bmp_buf(const char* mbuf,int bsize, int displaymode)
{
	image_p pimage = NULL;
	uint8_t *pdata,*data,*line;
	int dsize,w,h,texw,texh,bpb,size,x,y,done = 0;
	uint32_t* p32;
	uint16_t* p16;
	uint16_t color16;
	uint32_t color32;
	PBITMAPFILEHEADER pbfh = (PBITMAPFILEHEADER)mbuf;
	PBITMAPINFOHEADER pbih;

	if(pbfh->bfType !=0x4d42){
		nge_print("not bmp file\n");
		return 0;
	}
	pbih = (PBITMAPINFOHEADER)(mbuf+sizeof(BITMAPFILEHEADER));
	dsize = sizeof(BITMAPFILEHEADER)+pbih->biSize;
	pdata =  (uint8_t*)mbuf+dsize;
	w = pbih->biWidth;
	h = pbih->biHeight;
	texw = roundpower2(w);
	texh = roundpower2(h);
	bpb  = 4;
	if(displaymode != DISPLAY_PIXEL_FORMAT_8888){
		bpb = 2;
	}
	//int biSizeImage = ((((pbih->biWidth * pbih->biBitCount) + 31) & ~31) / 8) * pbih->biHeight;
	size = texw * texh * bpb;
	data = (uint8_t*)malloc(size);
	memset(data,0,size);
	p32 = (uint32_t*)data;
	p16 = (uint16_t*) p32;
	line = NULL;
	if(pbih->biBitCount == 24){
		for (y = h;y>0;y--){
			line = pdata+(y-1)*w*3;
			for (x=0;x<w;x++){
				switch(displaymode)
				{
				case DISPLAY_PIXEL_FORMAT_8888:
					color32 = MAKE_RGBA_8888(line[2],line[1],line[0],0xff);
					*(p32+x) = color32;
					break;
				case DISPLAY_PIXEL_FORMAT_565:
					color16 = MAKE_RGBA_565(line[2],line[1],line[0],0xff);
					*(p16+x) = color16;
					break;
				case DISPLAY_PIXEL_FORMAT_5551:
					color16 = MAKE_RGBA_5551(line[2],line[1],line[0],0xff);
					*(p16+x) = color16;
					break;
				case DISPLAY_PIXEL_FORMAT_4444:
					color16 = MAKE_RGBA_4444(line[2],line[1],line[0],0xff);
					*(p16+x) = color16;
					break;
				}
				line+=3;
			}
			p32 += texw;
			p16 += texw;
		}
		done = 1;
	}
	else if(pbih->biBitCount == 32){
		for (y = h;y>0;y--){
			line = pdata+(y-1)*w*4;
			for (x=0;x<w;x++){
				switch(displaymode)
				{
				case DISPLAY_PIXEL_FORMAT_8888:
					color32 = MAKE_RGBA_8888(line[2],line[1],line[0],0xff);
					*(p32+x) = color32;
					break;
				case DISPLAY_PIXEL_FORMAT_565:
					color16 = MAKE_RGBA_565(line[2],line[1],line[0],0xff);
					*(p16+x) = color16;
					break;
				case DISPLAY_PIXEL_FORMAT_5551:
					color16 = MAKE_RGBA_5551(line[2],line[1],line[0],0xff);
					*(p16+x) = color16;
					break;
				case DISPLAY_PIXEL_FORMAT_4444:
					color16 = MAKE_RGBA_4444(line[2],line[1],line[0],0xff);
					*(p16+x) = color16;
					break;
				}
				line+=4;
			}
			p32 += texw;
			p16 += texw;
		}
		done = 1;
	}

	if (done){
		pimage = (image_p)malloc(sizeof(image_t));
		memset(pimage,0,sizeof(image_t));
		pimage->data = (uint8_t *)data;
		pimage->w    = w;
		pimage->h    = h;
		pimage->texw = texw;
		pimage->texh = texh;
		pimage->bpb  = bpb;
		pimage->dtype = displaymode;
		pimage->rcentrex = pimage->w*1.0f/2;
		pimage->rcentrey = pimage->h*1.0f/2;
		pimage->mode = GET_PSM_COLOR_MODE(displaymode);
		pimage->mask = CreateColor(255,255,255,255,displaymode);
		pimage->texid = image_tid++;
	}
	return pimage;
}
Example #15
0
	void  Java_org_libnge_nge2_NGE2_nativeFinalize(JNIEnv* env,
            jobject thiz )
	{
		//sInstant->Fini();
		nge_print("nge2 finished normaly.\n");
	}
image_p create_contrast_image(image_p src, int contrast){
	uint32 y,x;
	uint8 recover = 0;
	image_p pimg;
	uint16 *p16,*psrc16;
	uint32 *p32,*psrc32;
	sint16 r,g,b,a;
	sint32 col;
	uint8 colmap[255];

	if(contrast<-100 || contrast>100)
	{
		nge_print("create_contrast_image arg 'contrast' must between -100 to 100!");
		return NULL;
	}

	contrast+=100;
	if(contrast == 100)
		return image_clone(src);

	if(src->swizzle ==1){
		unswizzle_swap(src);
		recover = 1;
	}

	for(x=0;x<256;x++){
		if(contrast < 100){
			colmap[x] = max(0, min((int)(x - 128) * (contrast / 100) + 128, 255));
		}
		else{
			colmap[x] = max(0, min((int)(x - 128) * ((contrast - 100) * 1.28) + 128, 255));
		}
	}

	pimg = image_create(src->w, src->h, src->dtype);

	for(y=0;y<src->h;y++)
	{
		for(x=0;x<src->w;x++){
			if(src->dtype == DISPLAY_PIXEL_FORMAT_8888)
			{
				p32 = (uint32 *)pimg->data + y*src->texw;
				psrc32 = (uint32 *)src->data + y*src->texw;
			}
			else
			{
				p16 = (uint16 *)pimg->data + y*src->texw;
				psrc16 = (uint16 *)src->data + y*src->texw;
			}

			if(src->dtype == DISPLAY_PIXEL_FORMAT_4444){
				col = *(psrc16 + x);
				GET_RGBA_4444(col, r,g,b,a);
				if(a > 0)
				{
					r = colmap[r];
					g = colmap[g];
					b = colmap[b];
				}
				*(p16 + x) = MAKE_RGBA_4444(r,g,b,a);
			}
		}
	}

	if(recover)
		swizzle_swap(src);

	return pimg;

}
Example #17
0
	void Java_org_libnge_nge2_NGE2_nativeStart(JNIEnv* env,
	            jobject thiz )
	{
		nge_print("start.\n");
		sInstant->Start();
	}