|  | 
     
	
	
		| Программирование для PSP Вы программист? Welcome сюда... |  
	
	
		
	
	
	
		|  09.08.2010, 23:30 | Сообщение: #1 (901113) |  
	| 
 
  
			
				Регистрация: 13.07.2009 Возраст: 34 
					Сообщений: 21
				 Вы сказали Спасибо: 1 
		
			
				Поблагодарили 3 раз(а) в 3 сообщениях
			
		
	 Сила репутации: 1 Репутация: 3 
					(с надеждой на лучшее)
      | 
				 Проблемы с рисунками PNG 
 
	
		Здравствуйте! Решил начать программировать на ЗЫЗе. Но вот уже на первой программе возникли трудность. Цель состоит в том чтоб показать на экране рисунок на полный экран. Поискав в нете решил использовать библиотеку для рисунков PNG. Привожу код ниже: 
Но оказалось что рисуки с большим размером не грузятся(больше размера 32х32), пишет "Image load failed!". В чём может быть проблема? Если это особенность этой библиотеки то какую библиотеку можно использовать вместо этой, желательно с примером кода. Спасибо заранее!!! 
 |  
	|  |       |  
	
		
			| Этот пользователь сказал Спасибо Romcik077 за это полезное сообщение: |  |  
	
		
	
	
	
		|  10.08.2010, 19:15 | Сообщение: #2 (901222) |  
	| 
 
  
			
Модель консоли: PSP-1004 Прошивка: 6.61 PROMOD-C2p Другие консоли: Все PSP, все PSV, SCPH-1002, SCPH-102, SCPH-77008, CECH-4208C, SCPH-1000R Регистрация: 19.03.2008 Адрес: Россия 
					Сообщений: 5,832
				 Вы сказали Спасибо: 825 
		
			
				Поблагодарили 3,969 раз(а) в 2,068 сообщениях
			
		
	 Сила репутации: 1 Репутация: 3969 
					(репутация неоспорима)
      | 
 
	
		Попробуй больше памяти под приложение выделить, например.Ридми библиотеки уже изучено, полагаю.
 
 |  
	|  |       |  
	
		
			| Этот пользователь сказал Спасибо Yoti за это полезное сообщение: |  |  
	
		
	
	
	
		|  11.08.2010, 13:38 | Сообщение: #3 (901279) |  
	| 
 
  
			
				Регистрация: 13.07.2009 Возраст: 34 
					Сообщений: 21
				 Вы сказали Спасибо: 1 
		
			
				Поблагодарили 3 раз(а) в 3 сообщениях
			
		
	 Сила репутации: 1 Репутация: 3 
					(с надеждой на лучшее)
      | 
				  
 
	
		Спасибо Yoti!!! Заставил меня опять сесть за поиски библиотеки и мануала для рисунков PNG, и я нашёл вот это . Что-ж попробовал, скомпилил вроде всё получилось. Присмотревшись в этот код я увидел что-то знакомое и вспомнил что приблизительно такой код я видел и в graphics.c для функций "loadImagе". Сравнив я заметил что в graphics.c присуствует (выделено жирным): 
[spoiler]
 
	Image* loadImage(const char* filename)
{
    png_structp png_ptr;
    png_infop info_ptr;
    unsigned int sig_read = 0;
    png_uint_32 width, height;
    int bit_depth, color_type, interlace_type, x, y;
    u32* line;
    FILE *fp;
    Image* image = (Image*) malloc(sizeof(Image));
    if (!image) return NULL;
    if ((fp = fopen(filename, "rb")) == NULL) return NULL;
    png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
    if (png_ptr == NULL) {
        free(image);
        fclose(fp);
        return NULL;;
    }
    png_set_error_fn(png_ptr, (png_voidp) NULL, (png_error_ptr) NULL, user_warning_fn);
    info_ptr = png_create_info_struct(png_ptr);
    if (info_ptr == NULL) {
        free(image);
        fclose(fp);
        png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
        return NULL;
    }
    png_init_io(png_ptr, fp);
    png_set_sig_bytes(png_ptr, sig_read);
    png_read_info(png_ptr, info_ptr);
    png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, int_p_NULL, int_p_NULL);
    if (width > 512 || height > 512) {
        free(image);
        fclose(fp);
        png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
        return NULL;
    }
    image->imageWidth = width;
    image->imageHeight = height;
    image->textureWidth = getNextPower2(width);
    image->textureHeight = getNextPower2(height);
    png_set_strip_16(png_ptr);
    png_set_packing(png_ptr);
    if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(png_ptr);
    if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) png_set_gray_1_2_4_to_8(png_ptr);
    if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) png_set_tRNS_to_alpha(png_ptr);
    png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
    image->data = (Color*) memalign(16, image->textureWidth * image->textureHeight * sizeof(Color));
    if (!image->data) {
        free(image);
        fclose(fp);
        png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
        return NULL;
    }
    line = (u32*) malloc(width * 4);
    if (!line) {
        free(image->data);
        free(image);
        fclose(fp);
        png_destroy_read_struct(&png_ptr, png_infopp_NULL, png_infopp_NULL);
        return NULL;
    }
    for (y = 0; y < height; y++) {
        png_read_row(png_ptr, (u8*) line, png_bytep_NULL);
        for (x = 0; x < width; x++) {
            u32 color = line[x];
            image->data[x + y * image->textureWidth] =  color;
        }
    }
    free(line);
    png_read_end(png_ptr, info_ptr);
    png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL);
    fclose(fp);
    return image;
}
 
[/spoiler] 
Я ещё новичок в С++ програмированиё, но как я нашел в интернете это выделение память для картинки. ну я взял да удалил:  if (!image) return NULL; , и всё запустилось. Спасибо ещё раз за помощь. 
 |  
	|  |       |  
	
		
	
	
	
	
	
	
	
	
		| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) |  
		|  |  
	| Опции темы |  
	|  |  
	| Опции просмотра |  
	
	| 
		
		 Комбинированный вид |  
	| 
	|  Ваши права в разделе |  
	| 
		
		Вы не можете создавать новые темы Вы не можете отвечать в темах Вы не можете прикреплять вложения Вы не можете редактировать свои сообщения 
 HTML код Выкл. 
 |  |  |  
          Текущее время: 00:55. Часовой пояс GMT +3.
        
      
        | 
		
		Powered by vBulletin® Version 3.8.7 Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot 
			
		PSPx Forum - Сообщество фанатов игровых консолей.
	    |  |  |