Я пишу программу на C для эмуляции фонового режима 7 SNES.Мне нужны значения r (красный), g (зеленый) и b (синий), чтобы пиксель отображался в каждой «точке» (пиксель / точка) на экране.Для этого требуется преобразование «мозаичной карты» (мозаичная карта - это просто сетка пикселей 1024 x 1024, которую вы используете, чтобы решить, что разместить на дисплее 256 x 224 пикселей).Мне нужно иметь возможность считывать и записывать в пиксели как их отдельные значения r, g и b на карте тайлов.
Для быстрого объяснения формата, который я использую, есть 256 «символов», которые простоБлоки 8 х 8 пикселей (состоят из трех цветовых байтов для представления красного, зеленого и синего).Карта тайлов состоит из сетки 128 x 128 любого из этих символов.Как только карта тайлов создана, на карте тайлов формируется преобразование, чтобы различить отдельные пиксели для отображения на экране размером 256 x 224 пикселя.
Для этого я определяю: структуру с именем "color", содержащую три неподписанныхchars для байтов r, g и b, тип данных с именем «CHR», представляющий собой массив «color» размером 8 x 8, тип данных с именем «ChrRom», представляющий собой массив из 256 «CHR» (возможно, можетизбегать определения, но это был единственный способ, которым я мог бы думать, иметь массив массивов, которые я также могу разыменовать ... я думаю).Наконец, у меня есть разыменованный массив с именем «Tilemap» для (надеюсь) хранения адресов памяти каждого элемента в структуре «ChrRom».Извините, если это не было ясно, но вот пример кода:
typedef struct{
unsigned char r;
unsigned char g;
unsigned char b;
} colour;
typedef colour CHR[8][8];
typedef CHR ChrRom[256];
int main() {
ChrRom *Tilemap[128][128];
//Do other computation
return 0;
};
Пока что это скомпилируется.Однако теперь я хочу установить цветовые значения определенного пикселя в символе, и сразу же возникает проблема;во-первых, я больше не могу получить доступ к отдельным цветам пикселя в «персонаже».У меня есть доступ только к самой плитке, во-вторых, я все равно не знаю, как читать значения цветов в карте.Что касается второй проблемы (предположим, что я каким-то образом прочитал из файла и передал соответствующие значения цвета в символы карты тайлов и составил карту тайлов указанных символов в заданном порядке), я попытался:
//Still in the function where Tilemap was declared obviously (main)
printf("%hhu\n", Tilemap[1][1].ChrRom[7].CHR[1][3].r);
GCC не будет компилировать это.Он говорит:
запрос на член 'ChrRom' в чем-то, не являющемся структурой или объединением
, но если я удаляю ChrRom и CHR перед записями массива, я получаю:
ожидаемый идентификатор до '[' токена