IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
Помогите с палитрой
nikita600
сообщение 3.4.2009, 15:49
Сообщение #1


Активный участник
***

Группа: Тестеры
Сообщений: 52
Регистрация: 17.12.2008
Пользователь №: 369



Вот решил поросить помощи над моим маленьким проектом по переводу Tony Hawk's Pro Skater для PSX. Замучался писать конвертер шрифта в bmp. С палитрой не могу разобраться, да и с подсчётом ширины какая - то проблема. Вот архив (http://ifolder.ru/11409216) с сырцом, шрифтом и bmp'шником, который я получил при первой версии программы. Помогите, кто, чем может.
============================================
Небольшое описание .fnt файла:
0х01 - к-во букв в шрифте.
0х02 -- 0х1С3 - Заголовок с шириной, высотой, оси X и Y.(Порядок такой: 4байта - ось Х, 4байта - высота, 4байта - ширина, 4байта - ось Y)
0х1С4 -- 0х1Е4 - Палитра.
остальные байты само изображение.
Исходное изображение должно хранится в формате 4bpp.
Перейти в начало страницы
 
+Цитировать сообщение
HoRRoR
сообщение 3.4.2009, 16:15
Сообщение #2


Администратор
***

Группа: Администраторы
Сообщений: 948
Регистрация: 28.12.2007
Из: Ростов-на-Дону
Пользователь №: 1



Прежде чем выкладывать свои исходники на обозрение, ознакомься, пожалуйста, хотя бы поверхностно с вот этим документиком.

Теперь проведём работу над ошибками:
Код
  int nFonts, width, height, filesize, palletesize;
  int crap, shit, a[nFonts], i, x, n;

Мне интересно, как ты собрался объявлять статический массив, задавая размер динамической переменной? Если программа компилируется (что странно), то это не значит, что она тебя поняла.
Используй динамическое выделение памяти.


Код
if (argc != 3){
  system("PAUSE");
  return 0;
}

Это проверка на количество аргументов, а не на наличие файлов.

Код
fnt = fopen(argv[1], "rb");
if (fnt == NULL){
  printf("Can't open %s!", argv[1]);
}
printf("Opened %s!\n", argv[1]);

А вот это уже проверка на наличие файла. К слову, программа у тебя будет выполняться даже если файла нет, так что позаботься о наличии return'а сразу же после сообщения об ошибке.

Код
for (i = 0; i < nFonts; i++){
  fread(&crap, 4, 1, fnt);
  fread(&height, 4, 1, fnt);
  fread(&shit, 4, 1, fnt);
  fread(&a[nFonts], 4, 1, fnt);
}

Вообще не понимаю смысла этих манипуляций. Данные считываются в переменные, и тут же в переменные считываются другие данные. Смысл? Опиши структуру, создай массив этих структур и читай туда.

А файл, между прочим, надо ещё и закрывать.

И вообще, я не вижу процедуры сохранения в bmp, в чём помогать то? Или помочь - это сделать всё за тебя?

Цитата
0х01 - к-во букв в шрифте.
0х02 -- 0х1С3 - Заголовок с шириной, высотой, оси X и Y.(Порядок такой: 4байта - ось Х, 4байта - высота, 4байта - ширина, 4байта - ось Y)
0х1С4 -- 0х1Е4 - Палитра.

Не лепи всякую чушь, ознакомься с тем, что такое смещение (адрес/позиция/...).


--------------------
Перейти в начало страницы
 
+Цитировать сообщение
nikita600
сообщение 4.4.2009, 11:26
Сообщение #3


Активный участник
***

Группа: Тестеры
Сообщений: 52
Регистрация: 17.12.2008
Пользователь №: 369



Согласен, исходник написан не очень, т.к. я первый раз работаю с конвертацией графики, а также некоторые комментарии обрезал. Да плюс еще за основу взял конвертер gh3.img.ps2 to bmp. Спасибо, что показал, что да, как да где. Учту ошибки, постараюсь исправить.

P.S.: Я просил с палитрой помочь.
Перейти в начало страницы
 
+Цитировать сообщение
nikita600
сообщение 8.4.2009, 19:03
Сообщение #4


Активный участник
***

Группа: Тестеры
Сообщений: 52
Регистрация: 17.12.2008
Пользователь №: 369



http://ifolder.ru/11497528 - Вот новый сырец, с двумя файлами шрифтов. Прошу помогите с палитрой... Кто-нибудь...
Перейти в начало страницы
 
+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 1.6.2020, 4:39