Прежде всего, вам нужно убедиться, что у вас есть правильные изображения запуска, включенные в ваш проект.
Вот таблица из Adobe сайт :
После того, как вы сделали эти изображения (и назвали точно так, как показано), включите их в свой проект (они должны быть в root вашего приложения), выполнив следующие действия:
В FlashPro
Если вы не против обрезки ваш контент немного, вы можете просто сделать это, когда начнется ваше приложение:
stage.scaleMode = StageScaleMode.NO_BORDER
Это уменьшит ваш swf, чтобы он заполнил весь экран, сохраняя пропорции. Довольно легко понять, сколько отступов вам нужно, чтобы этот метод работал хорошо для небольших вариаций пропорций для различных iPhone.
Однако, если вы хотите разрешить изменения ориентации (портретный пейзаж) , обрезка, вероятно, будет слишком серьезной.
. Наилучший способ размещения различных разрешений экрана и соотношения сторон, однако, состоит в том, чтобы сделайте ваше приложение отзывчивым. Это включает следующий код в начале вашего приложения:
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
Теперь ваши оценки сцены (stage.stageWidth
& amp; stage.stageHeight
) будут иметь полную ширину и высоту устройства *. (на некоторых устройствах есть панель инструментов внизу или верхняя полоса).
Затем вы можете позиционировать вещи через код.
Если вы хотите, чтобы простой способ конвертировать то, что у вас есть (вы не хотите использовать код для изменения размера и выравнивания абсолютно всех), просто поместите весь свой контент в контейнер MovieClip с именем экземпляра container
, вы можете его размер и положение следующим образом:
//scale the container as big as possible while still fitting entirely in the screen:
//figure out which dimension should match the stage (widht or height)
if(container.width - stage.stageWidth >= container.height - stage.stageHeight){
container.width = stage.stageWidth;
container.scaleY = container.scaleX;
}else {
container.height = stage.stageHeight
container.scaleX = container.scaleY;
}
//center it on the screen:
container.x = (stage.stageWidth - container.width) * 0.5;
container.y = (stage.stageHeight - container.height) * 0.5;
Также рекомендуется прослушивать события изменения размера, в случае изменения размера экрана (например, вы максимизируете / восстанавливаете на рабочем столе или переходите от портрета к пейзажу на мобильном устройстве).
Вы делаете это по прослушивание события изменения размера на сцене:
stage.addEventListener(Event.RESIZE, redrawScreen);
function redrawScreen(e:Event):void {
//resize everything as the window size has changed.
}
Дикая догадка: ваш код предполагает машину большого конца (сначала самый старший байт). ПК с ОС Windows является малоподвижным. Поэтому, возможно, попробуйте
shortValue = (shortArray[j+1]<<8);
shortValue += (shortArray[j]);
. Если действительно проблема заключается в том, что проблема, то представленный вами код просто сбривает 4 наиболее значимых бита каждого значения и расширяет остальные до диапазона интенсивности. Hm, EDIT, спустя 2 секунды: нет, это было мозгом. Но попробовать все равно?
Cheers & amp; hth.,
- Alf
Основная проблема, как я понимаю, состоит в том, чтобы преобразовать 12-битное значение в 8-разрядный.
Range of 12-bit value = 0 - 4095 (4096 values)
Range of 8-bit value = 0 - 255 ( 256 values)
Я бы попытался преобразовать 12-битное значение x
в 8-битное значение y
Некоторые C-ish-коды:
uint16_t x = some_value;
uint8_t y = (uint8_t) ((double) x/4096 ) * 256;
Update
Благодаря комментарию Kriss я понял что я проигнорировал проблему скорости. Вышеупомянутое решение из-за плавающих операций может быть медленнее, чем операции чистого целого.
Затем я начал рассмотрение другого решения. Как насчет построения y
с 8
наиболее значимыми битами x
? Другими словами, обрезая младшие значащие биты 4
.
y = x >> 4;
Будет ли это работать?
, если вы просто хотите сбросить нижние 4 младших значащих бита, вы можете сделать следующее:
unsigned int start_value = SOMEVALUE; // starting value
value = (value & 0xFF0 ); // drop bits
unsigned char final_value =(uint8_t)value >> 4; //bit shift to 8 bits
Обратите внимание на «unsigned». Вы не хотите, чтобы подписанный бит сбрасывался с вашими значениями.
Нравится это:
// Image is stored in 'data'
unsigned short* I = (unsigned short*)data;
for(int i=0; i<imageSize; i++) {
// 'color' is the 8-bit value
char color = (char)((double)(255*I[i])/(double)(1<<12));
/*...*/
}