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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разворот картинки, Image.createImage() 
V
    Опции темы
Jlekc
Дата 1.8.2005, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нужно было релизовать разворот картинки (используеться MIDP 2.0)
полазил по нету, нашол подобный премер:
Код

Image im    =   Image.createImage(source,
                    0,
                    0,
                    source.getWidth(),
                    source.getHeight(),
                    int transform);


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


--------------------
PM MAIL ICQ   Вверх
javastic
Дата 1.8.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

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



То что тебе надо сидит в классе Sprite.

Соответственно:

Цитата
Sprite.TRANS_NONE - causes the specified image region to be copied unchanged
Sprite.TRANS_ROT90 - causes the specified image region to be rotated clockwise by 90 degrees.
Sprite.TRANS_ROT180 - causes the specified image region to be rotated clockwise by 180 degrees.
Sprite.TRANS_ROT270 - causes the specified image region to be rotated clockwise by 270 degrees.
Sprite.TRANS_MIRROR - causes the specified image region to be reflected about its vertical center.
Sprite.TRANS_MIRROR_ROT90 - causes the specified image region to be reflected about its vertical center and then rotated clockwise by 90 degrees.
Sprite.TRANS_MIRROR_ROT180 - causes the specified image region to be reflected about its vertical center and then rotated clockwise by 180 degrees.
Sprite.TRANS_MIRROR_ROT270 - causes the specified image region to be reflected about its vertical center and then rotated clockwise by 270 degrees.


The size of the returned image will be the size of the specified region with the transform applied. For example, if the region is 100 x 50 pixels and the transform is TRANS_ROT90, the returned image will be 50 x 100 pixels.


Удачи!



--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Jlekc
Дата 1.8.2005, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



яс, псиба.

ЗЫ: а в продолжения темы, как изменить размер картинки?


--------------------
PM MAIL ICQ   Вверх
Nemesis
Дата 3.8.2005, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Jlekc, если под изменение картинки подразумевается масштабирование(увеличение или умеьшение), то скажу сразу, что в midp такое не предусмотрено. Но ты можешь "вручную" масшатабировать картинку, т.е. считываешь массив цветов пикселей из картинки - метод
public void getRGB(int[] rgbData,
int offset,
int scanlength,
int x,
int y,
int width,
int height)
затем манипулируешь массивом rgbData. Если хочешь увеличить картинку -> заводишь еще один массив с новым кол-вом пикселей и по определенному правилу записываешь в него данные(если кому-то нужно будет, могу дать алгоритм), аналогично с уменьшением.
Но! прошу заметить, что кол-во элементов(суммарное кол-во элементов во всех массивах в пределах одного мидлета) не должо превышать ~130000. Т.е. сразу несколько картинок(средних размеров) различных масштабов держать не получится.И не получится увеличить картинку размером 176 х 220 в 2 раза, т.к. потребуется массив из 176*2*220*2 = 154880 элементов smile
--------------------
PM MAIL   Вверх
Jlekc
Дата 3.8.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



о тком изврате слышал, но неужели нету встроеного метода?


--------------------
PM MAIL ICQ   Вверх
javastic
Дата 4.8.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

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



Нету. Можно порыскать в Инете на предмет готовых решений и использовать в своём проекте.


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
111
Дата 5.2.2006, 02:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет. Есть статья где подробно описан поворот картинки в J2me на любой угол. Есть рабочий пример.
PM MAIL   Вверх
Jlekc
Дата 5.2.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
PM MAIL ICQ   Вверх
111
Дата 24.2.2006, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тут в другом форуме один чел сказал, что есть более быстрый алгоритм поворота картинки без всяких синусов и умножений. Все на сложении. Кто-нить что знает?
PM MAIL   Вверх
Jlekc
Дата 24.2.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есе на пярмой угол крутить, то мона и без синусов обойтись


--------------------
PM MAIL ICQ   Вверх
valerchi
Дата 27.5.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



помогите, пожалуйста.
Хочу сделать анимацию, как открывается глаз.
загрузил в папку /res шесть фоток(первая -закрытый глаз, вторая - чуть открытый... последняя - совсем открытый).
Составил цикл загрузки каждого изображения. На эмуляторе вроде получается, а на телефоне - нет. Во-первых, на телефоне изображение загружается слишком долго, а во-вторых, между загрузкой картинок идёт мерцание и проскакивает йзображение фонового рисунка с телефона.
И ещё: я не использовал массив для загрузки и выгрузки изображений. Может дело в этом?
Вот мой код:


Код

import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import java.io.IOException;
public class Glaz extends MIDlet implements CommandListener{
private Form f;
private Command n;
private Command b;
private Image i;
private int x=1;         private int y=1;
private Display d;
public void destroyApp(boolean d){notifyDestroyed();}
public void pauseApp(){}
public void startApp (){
d = Display.getDisplay(this);   
f = new Form("grafa");          
f.setCommandListener(this);     // установить приемник команд для формы
n=new Command("ОК", Command.OK, 0);
f.addCommand(n);
b = new Command("Back", Command.BACK, 1); 
// добавить команду в форму
f.addCommand(b);
Ticker t = new Ticker("нажми ОК");  
f.setTicker(t);// добавить бегущую строку в форму
// добавить в форму первую картинку
try {
i = Image.createImage("/1.png");
f.append(i);// вывести форму на экран
d.setCurrent(f);
}
catch (IOException ioe) {
// обработать исключительную ситуацию.
// если файл не может быть открыт
System.out.println(ioe.getMessage());
}
}  // отобразить форму на экране
public void commandAction(Command c, Displayable s) 

if (c == n)  
for (x=1; x!=7; ++x)
{
d.setCurrent(null);
f.delete(0);  // удалить из формы текущую картинку
try
{
i = Image.createImage("/" + Integer.toString(x) + ".png"); 
f.append(i);  // добавить картинку в форму
d.setCurrent(f);
}
catch (IOException ioe) 
{   
System.out.println(ioe.getMessage());
}
}
if (c == b) { 
x=6;
while(x>0){
try{
x-- ;  
d.setCurrent(null);
f.delete(0);  // удалить из формы текущую картинку
i = Image.createImage("/" + Integer.toString(x) + ".png"); 
f.append(i);// добавить картинку в форму
d.setCurrent(f);
if (x==1)x=-1 ;
}
catch (IOException ioe) {   // обработать исключительную ситуацию, если файл не может быть открыт
System.out.println(ioe.getMessage());}}
}}}




Это сообщение отредактировал(а) W0LF - 28.5.2008, 11:33
PM MAIL   Вверх
eugine_s
Дата 28.5.2008, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



valerchi, загрузи все картинки сразу в память.

Анимация тормозит из-за того что время создания картинки очень большое.
PM MAIL   Вверх
valerchi
Дата 28.5.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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




Извините за такие простые вопросы, я начинающий...
Это как загрузить в память ? То есть загрузить в массив?
PM MAIL   Вверх
W0LF
Дата 28.5.2008, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



как вариант smile


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Dummy
Дата 28.5.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, создать массив Image, один раз загрузить туда все и хранить. Получится что-то такое:

Цитата

private final static int IMAGE_COUNT = 6;

private Image imageCache[];

void initializeImages() throws IOException {
     int i;

     if (imageCache != null) {
          return;
     }

     imageCache = new Image[IMAGE_COUNT];

     for (i = 0; i < IMAGE_COUNT; i++) {
          imageCache[i] = Image.createImage("/" + x + ".png");
     }
}


И единожды вызвать его, например, в startApp() (в конструкторе не очень хочется возиться с I/O, уж больно интимный это участок кода ):

Цитата

public void startApp() {
    ... 

    try {
         initializeImages();
    } catch (IOException ioe) {
         // какая-то обработка
    }
}


В твоем же коде каждый раз при отрисовке картинки очередной кадр каждый раз грузится из jar-файла, т. е . происходит ковыряние в zip'е на файловой системе телефона - процесс весьма небыстрый.

Правда, если хранить картинки в памяти, стоит оценить, сколько же памяти они будут отъедать. Если много, то стоит подумать, как организовать память оптимальнее. Например, если телефон поддерживает CLDC 1.1, хранить не сильные ссылки на Image, а WeakReference.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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