|
Программирование для PSP Вы программист? Welcome сюда... |
09.08.2010, 23:30
|
Сообщение: #1 (901113)
|
Регистрация: 13.07.2009
Возраст: 33
Сообщений: 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,742
Вы сказали Спасибо: 819
Поблагодарили 3,845 раз(а) в 2,017 сообщениях
Сила репутации: 1Репутация: 3845 
(репутация неоспорима)
|
Попробуй больше памяти под приложение выделить, например.
Ридми библиотеки уже изучено, полагаю.
|
|
|
Этот пользователь сказал Спасибо Yoti за это полезное сообщение:
|
|
11.08.2010, 13:38
|
Сообщение: #3 (901279)
|
Регистрация: 13.07.2009
Возраст: 33
Сообщений: 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 код Выкл.
|
|
|
Текущее время: 17:46. Часовой пояс GMT +3.
Powered by vBulletin® Version 3.8.7 Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.
|
|
|