2013-05-28 3 views
0

Bonjour,Сохранить формат текстуры в 655

Простой, но непростой вопрос - думаю, для вас, ребята.

В видеоигре, в которой я делаю свой первый римейк, я столкнулся с текстурами формата 16 bbp RGB655 (нет, НЕ 565, 655!). Я понял, что это был формат с помощью попыток и ошибок с необработанными данными в IrfanView. Поэтому IrfanView может прочитать это в порядке, НО НЕ МОЖЕТ СОХРАНИТЬ ЭТО В ФОРМАТЕ. > :(< - (WTF)

Так я пытался в последнее время, чтобы найти что-нибудь, что может сохранить/экспортировать файлы изображений в этом формате;

GIMP ни Photoshop даже близко к интерпретации исходных данных в порядке и варианты Вывоз столь же несчастными.

на стороне Google, все, что я, кажется, чтобы получить некоторые случайные BS неопределенно в той же теме моего вопроса (и прохладный многоцветной лазерное устройство).

так наименее Мне нужно что-то, что можно сохранить/экспортировать в этом формате (RGB 655)?

... Или, если он существует, то, что может ... манипулировать биты МАССОВО в одной операции, как, например:

от [R 5 R 4 R 3 R 2 R 1 R0 G4, G3 G2 G1 G0 B4 B3 B2 B1 В0] к [R 5 R 4 R 3 R 2 R 1 R 0 0 0] [G4, G3, G2, G1, G0 0 0 0] [В4 В3 В2 В1 В0 0 0 0]

Где в этом случае, формат запись является нечетным Формат RGB655 и выход - очень стандартный формат RGB 24bpp. Но, конечно, фактическая операция, в которой я нуждаюсь больше всего, - это нечто противоположное. Было бы гораздо более многовалютно иметь этот «бит-манипулятор». В будущем, вероятно, будет много других проблем, которые могут быть решены с помощью такого программного обеспечения. (BTW, шестнадцатеричные редакторы, я не делаю ничего такого удаленно).

Заранее спасибо.

ответ

0

Почему бы вам не преобразовать данные самостоятельно? Вы можете конвертировать RGB655 в 8-бит на канал RGB, делая это:

uint16_t* nextPixel = dataPtr; // dataPtr is a pointer to the first 655 pixel 
for (y = 0; y < imageHeight; y++) 
{ 
    for (x = 0; x < imageWidth; x++) 
    { 
     uint16_t inPixel = *nextPixel; 
     nextPixel++; 
     uint8_t red = ((inPixel & 0xFC00) >> 10) & 0x003F; 
     uint8_t green = ((inPixel & 0x03E0) >> 5) & 0x001F; 
     uint8_t blue = (inPixel & 0x001F); 
     //... do whatever you need to to store the new pixel... 
    } 
} 
+0

Да, <. <, Я думаю, я уйду, чтобы сделать это. Несмотря на то, что я медленный кодер, и поэтому часто все происходит не так с этим ... Будем надеяться на лучшее :) –

Смежные вопросы