Модераторы: javastic, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с графикой и ее обновление, Как поместить в приложение карту и ри... 
:(
    Опции темы
nangel
Дата 27.2.2008, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Привет всем,
народ поделитесь как можно засунуть картинку(карту города) в програмку. Размер карты 1153X1514.
Сложность в том, чтобы  НЕ  разделять карту на равные части, а как-то выполнить перемещение по ней используя базовый крестик телефона??????????

После чего и нарисовать на выбранной точке другой рисунок и отправить его координаты на сервер.

Может кто уже далал подобные проги, если не трудно помогите примером.

Спасибо!
PM MAIL   Вверх
Brodyaga
Дата 27.2.2008, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Цитата

Сложность в том, чтобы  НЕ  разделять карту на равные части, а как-то выполнить перемещение по ней используя базовый крестик телефона??????????


Что вы хотите этим сказать и какой формат карт вы используете?
PM MAIL   Вверх
nangel
Дата 27.2.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



карта в GIF формате, размеры написал.
если можно, то покажите кодом со списком подключаемых библиотек.

СПАСИБ!!  smile  

Это сообщение отредактировал(а) nangel - 27.2.2008, 10:58
PM MAIL   Вверх
Brodyaga
Дата 27.2.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Что значит не разделяя карту на равные части? Всеровно придёца выдирать из неё кусок, не загружать же всю карту в память телефона.. ресурсов не хватит.
PM MAIL   Вверх
eugine_s
Дата 27.2.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Тут однозначно нужно резать карту, так как столько в память ты не сможешь использовать:

1153 * 1500 * 2 (каждый пиксель картинки в памяти занимает 2 б) = 3,5 Мб и это только под одну картинку...

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

Если схематически, то вот так:
1 2 3
4 5 6
7 8 9

5-й квадрат отображается на экране(считается, что размер квадрата равен размеру экрана (ну или размеру прямоугольника куда выводиться карта)) , а в памяти так же висят соседние квадраты 1 - 4, 6 - 9.
Пусть тебе нужно двигаться в правую сторону (в направлении квадрата 6), как только сместился на половину квадрата (т.е. половина 6-го квадрата), то квадраты 1,4,7 - освободил из памяти и загрузил другие квадраты. 

Что-то типа такого. Но следует учитывать, что при большом размере экрана(места для отображения карты), этот алгоритм почти не сильно экономит память. 
Например, размер квадрата получился 176х220, тогда размер занимаемой памяти 176*220*9*2 = 700 кб, но если размер квадрата 240х320, то размер памяти = 1,3 мб - а это уже много.

Тогда можно модифицировать алгоритм вот так:

 0    1    2   3
 4    5    6   7
 8    9  10  11
12 13  14  15


И на экране отображаются квадраты 5,6,9,10 (квадрат равен 1/4 размера экрана)
При экране 176х220, память занимаемая будет равна: 44 * 55 * 16 * 2 = 77 кб
(44 = 176 / 4, 55 = 220 / 4)
PM MAIL   Вверх
Brodyaga
Дата 28.2.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Да... Только перед всем этим тебе нужно разобраца со структурой формата Gif, чтобы знать как вытащить биты для нужного квадрата ;)
PM MAIL   Вверх
math64
Дата 28.2.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Не нужно разбираться в форате gif. Режешь в графическом редакторе (или пишешь программу резалку если у тебя много карт).
Сохранить куски лучше в png, gif не все телефоны понимают.
PM   Вверх
Brodyaga
Дата 28.2.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Цитата

Сохранить куски лучше в png, gif не все телефоны понимают.

Вот поэтому то ему и нужно разобраться в GIF  формате, выдирать куски байт с палитрой и выводить изображение на канву smile

А то что ему каждую карту чтоли резать придёца в редакторе перед помещение на телефон...
PM MAIL   Вверх
math64
Дата 28.2.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Режешь не J2ME, а в J2SE или на любом другом языке, в котором есть библиотеки для работы с gif и png.
А как писать такую программу нужно спрашивать в форуме по соответвующему языку.

Это сообщение отредактировал(а) math64 - 28.2.2008, 11:21
PM   Вверх
nangel
Дата 28.2.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



eugine_s,  Если можно подробнее как именно это сделать.. 
вот я нарезал 9 квадратов
1 2 3
4 5 6
8 7 9

как программно осуществить переход по картинкам. если есть кодик, то скинь плиз..
PM MAIL   Вверх
Brodyaga
Дата 28.2.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Вот я и говорю, что ему придёца перед тем как помещать карту в телефон, разрезать её отдельно. И так с каждой картой... А это не есть хорошо! Лучше разобраца с форматом GIF и научица доставать из него любой кусочек.
PM MAIL   Вверх
Sardar
Дата 28.2.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: нет
Всего: 317



Цитата(Brodyaga @  28.2.2008,  12:05 Найти цитируемый пост)
Лучше разобраца с форматом GIF и научица доставать из него любой кусочек.

Это не реально, там LZW сжатие, пока прошлые строки пикселей не прочтёшь, текущую не восстановить (словарь). Идея порезать всё на очень малые тайлы самая простая и практичная.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
math64
Дата 28.2.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Резать нужно на 25 квадратов (если у тебя экран 240x320) или больше (если экран меньше).
Код

int x,y; // координаты левого верхнего угла
int wImage, hImage; // размеры одного квадрата
/** массив для хранения квадратов
 * если хватает памяти - загружай все,
 * если нет - устанавливай в null те которых нет на экране
 */
Image images[][] = new Image[5][5];
public void paint(Graphics g) {
  int w = getWidth ();
  int h = getHeight ();
  int i = x / wImage;
  int j = y / hImage;
  int sx = x % wImage;
  int sy = y % hImage;
  int sw = wImage - sx;
  int sx = wImage - sy;
  int dx = 0;
  int dy = 0;
  // отрисовка первого квадрата
  g.drawRegion (images[i][j], sx, sy, sw, sh, Sprite.TRANS_NONE, dx, dy, Graphics.LEFT | Graphics.TOP);
  // отрисовка других квадратов
  ...
}
public void keyPressed(int code) {
    int a = getGameAction (code);
   switch(a) {
     case FIRE:
        // выбор
        return;
     case LEFT:
        x -= dx;
        break;
     case RIGHT:
        x += dx;
        break;
     case UP:
        y -= dy;
        break;
     case DOWN:
        y += dy;
        break;
   }
   // Обнуление ненужных images, загрузка нужных
}


Добавлено через 5 минут и 44 секунды
Brodyaga, как раз то что ты предлагаешь - ненормально.
Нормально: делается шаблонное J2ME приложение с тестовой картой и пишется программа, которая режет реальную карту и подменяет ею тестовую в шаблонном приложении.
PM   Вверх
eugine_s
Дата 28.2.2008, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



nangel, квадратов всего не обязательно будет 9 штук (хотя если всего 9 штук, то смысла нет в таком методе). Квадратов может быть на много больше - N (например N = 100). Эти все квадраты ты получаешь из большой карты на компьютере, разрезав ее на маленькие квадраты (про размер этих квадратов уже писалось) и сохранив их в формате png (про gif тоже уже писали - не все телефоны его поддерживают)

Из этих N квадратов, тебе нужно выбрать один квадрат - центральный и 8 его "соседей".... а уже нарисовать картинку на экране - это не сложно, math64 привел вариант как это можно сделать.
PM MAIL   Вверх
nangel
Дата 29.2.2008, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Спасибо всем, может кто знает спец прогу для нарезки картинки на куски???
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.