2016-01-29 2 views
0

Итак, у меня проблемы с отображением растровых изображений в аплите, а не базальтах. Да, я знаю, что это связано с объемом памяти, но когда я смотрю на heap_bytes_free и учитываю фрагментацию памяти, я все еще не понимаю, в чем проблема.Растровые изображения, не отображающиеся в галечном аплите

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

Я показываю два растровых изображения одинаковых размеров. Первый, compassWindow.png, использует только 3K в aplite и 6k в базальтах. Второй, decimalBackground.png использует 22k в базальтах (да 22,560 байт!) И не может быть создан в aplite.

При работе в aplite я не получаю сообщение об ошибке. Растровое изображение просто не отображается. Так что происходит?

Вот бревна из того же кода, выполняющиеся на двух платформах камешком оригинал (аплитов), и галька времени (базальт)

SDK 4.0.1 Ubuntu VirtualBox под Windoows 10. App 3.8.1-942- b60f188, Watch v3.8.2 (OG и Time) Вот код. Я поставил APP_LOG до и после команды gbitmap_create_with_resource. а) компас растрового

bitmap_layer = bitmap_layer_create(GRect(0, 0, 144,168)); 
APP_LOG(APP_LOG_LEVEL_DEBUG, "COMPASS Free: %d ", heap_bytes_free()); 
    gBitMap = gbitmap_create_with_resource(RESOURCE_ID_COMPASS); 
APP_LOG(APP_LOG_LEVEL_DEBUG, "COMPASS %d Free: %d ", (int) gBitMap, heap_bytes_free()); 
    bitmap_layer_set_bitmap (bitmap_layer, gBitMap); 

б) decimalBackground растрового

 bitmap_layer = bitmap_layer_create(GRect(0, 0, 144,300)); 
APP_LOG(APP_LOG_LEVEL_DEBUG, "decimalBackground Free: %d ", heap_bytes_free()); 
    gBitMap = gbitmap_create_with_resource(RESOURCE_ID_DECIMALBACKGROUND); 
APP_LOG(APP_LOG_LEVEL_DEBUG, "decimalBackground %d Free: %d ", (int) gBitMap, heap_bytes_free()); 
    bitmap_layer_set_bitmap (bitmap_layer, gBitMap); 

Вот определение ресурсов в appinfo.json. Вы заметите, что я использую новый унифицированный тип «bitmap».

"media": [ 
{ 
     "type": "bitmap", 
     "name": "COMPASS", 
     "file": "images/compassWindow.png" 
     }, 

{ 
     "type": "bitmap", 
     "name": "DECIMALBACKGROUND", 
     "file": "images/decimalBackground.png" 
     }, 

Вот результат: 1. базальт:

[10:54:44] wind_dir.c:101> COMPASS Free: 45928 
[10:54:44] wind_dir.c:103> COMPASS 537019168 Free: 39664 
[10:54:44] msg_handler.c:46> current window: startWind 
13 seconds later 
[10:54:57] javascript> raceQs V0.81:294 Current Window: performance 
[10:54:57] position.c:171> decimalBackground Free: 46132 
[10:54:57] position.c:173> decimalBackground 537019212 Free: 23572 

Примечание: в 10:54:44, байты бесплатно идут от 45928 до 39644 - разница в 6264

В 10:54:57, они идут от 46132 до 23572 - разница 22 560. 2. аплит:

[10:47:13] wind_dir.c:101> COMPASS Free: 4856 
[10:47:14] wind_dir.c:103> COMPASS 536994972 Free: 1776 

[10:47:20] position.c:171> decimalBackground Free: 5060 
[10:47:20] position.c:173> decimalBackground 0 Free: 5060 

В 10:47:14 байт бесплатно перейти от 4865 до 1776 года - разница в 3080. В 10:47:20 bytes_free не изменится, потому что gbitmap_create_with_resource (RESOURCE_ID_DECIMALBACKGROUND) ; терпит неудачу. А вот изображения, размер файла:.

-rwxrwx--- 1 alan alan 2772 Oct 14 11:55 compassWindow.png 

CompassWindow.png

-rwxrwx--- 1 alan alan 1637 Jan 18 16:02 decimalBackground.png 

decimalBackground.png

ответ

0

Проблема может быть, что вы пытаетесь установить изображение, которое является слишком большим в этой битовой карты слой. У меня была аналогичная проблема с aplite для большого горизонтального изображения. Я заметил, что если bitmap_layer больше экрана, он не появляется. Я думаю, что это может быть немного больше, но, конечно, не двойной высоты или что-то в этом роде.

Что я делал, это измельчение моего изображения в 2 и изменение одного для другого, когда это необходимо.

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