forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   MidletPascal (http://forum.boolean.name/forumdisplay.php?f=46)
-   -   инвертированная картинка (http://forum.boolean.name/showthread.php?t=8675)

mustaeed 16.07.2009 04:23

инвертированная картинка
 
есть ли возможность в МПаскале с помощью библиотеки, прорисовать картинку не как обычно слева-направо, а наоборот справа-налево?
Это былобы удобно, меньше места в оперативке будет занимать, и в архиве тоже. :)
Потому что у меня в игре(и думаю не только у меня) почти все картинки с анимацией персонажей, дублируются только с флипом справоналево.
Появилась такая идея оптимизации.

Тема наверно ещё не обсуждалась.

DJ PhoeniX 16.07.2009 09:40

Ответ: инвертированная картинка
 
Думаю, стоит написать функцию разворота в отдельном модуле, причём лучше на чистой Яве. И, при загрузке ресурсов, просто добавлять ещё и развёрнутый.
Идея ясна, примеров на яве до Ж, думаю, даже конечная библиотека во "Всемирной Помойке" найдётся... Поиск, как всегда, рулит.

DJ PhoeniX 16.07.2009 09:46

Ответ: инвертированная картинка
 
Далеко искать не пришлось: http://forum.boolean.name/showthread.php?t=3515
Вот ещё: http://forum.boolean.name/showthread.php?t=6132

temned 16.07.2009 17:25

Ответ: инвертированная картинка
 
Да, просто нужно иногда поюзать поиск

mustaeed 23.07.2009 13:55

Ответ: инвертированная картинка
 
мне нужно как раз для экономии оперативной памяти,
чтобы не загружать в оперативку дополнительные кадры,
то есть взять в определённом случае картинку и нарисовать обычным drawimage, когда персонаж идёт вправо,
а в другом случае взять эту же картинку, но просто прорисовать её в обратном направлении, когда персонаж идёт влево.
а все эти библиотеки загружают в память новую картинку но только инвертированную,так можно только лишь сэкономить размер jar файла.
ну а спрайты я вообще не люблю, помоему ими неудобно пользоваться,
лучше обычным способом подгружать каждый кадр отдельно.

я подсчитал у меня в игре на главного героя приходится 44 кадра для торса и 26 кадров для ног многовато помоему, и все эти кадры подгружены в оперативку, если научится прорисовывать картинку в обратном направлении то кадров станет в 2 раза меньше тк каждый кадр дублируется, нпример кадр стоя влево и кадр стоя вправо идентичный но инвертированный.

ну дак как можно такое вообще сделать или нет?

DJ PhoeniX 23.07.2009 16:46

Ответ: инвертированная картинка
 
А я чёто не понял, а чем не устраивает
Код:

DrawImage(Rotate(image1),0,0);
например?
И для рисования на канве развёрнутой картинки там есть функция гдето...

mustaeed 23.07.2009 18:23

Ответ: инвертированная картинка
 
а что возврашает функция - Rotate(image1) картинку?
соответственно на время прорисовки когда ты вызываеш - DrawImage(Rotate(image1),0,0); то программа на некоторое время создаёт
в памяти эту самую картинку а это мне кажется подобно тому чтобы делать так: drawimage(loadimage('/img.png'),0,0);
или я ошибаюсь?

ViNT 23.07.2009 20:07

Ответ: инвертированная картинка
 
Цитата:

Сообщение от mustaeed (Сообщение 111618)
а что возврашает функция - Rotate(image1) картинку?
соответственно на время прорисовки когда ты вызываеш - DrawImage(Rotate(image1),0,0); то программа на некоторое время создаёт
в памяти эту самую картинку а это мне кажется подобно тому чтобы делать так: drawimage(loadimage('/img.png'),0,0);
или я ошибаюсь?

Создавать то создает, только потом, сразу после отрисовки, должна уничтожить. А для инвертированной отрисовки нужно попиксельно отрисовывать из RGB-массива, что неприемлемо медленно, в отличие от стандартной отрисовки, когда просто происходит копирование всего изображения в один прием.
Если есть подозрение на утечку памяти, можно использовать "сборщик мусора" для уничтожения неиспользуемых объектов.

mustaeed 23.07.2009 23:02

Ответ: инвертированная картинка
 
я понимаю что копирование изображения прорисовка его и потом удаление
не будет занимать много оперативной памяти но ведь это получается будет сильно тормозить процессор а нельзя ли рисовать картинку также как в drawimage но только начиная с последнего бита и в обратном направлении?
я то и спрашиваю потомучто сам незнаю даже возможно ли это.

вот например взять игру contra на NES(dandy), неужели там у них все дублтрующиеся кадры персонажей только повёрнутые в другую сторону,
существуют как отдельный кадр? мне кажется что там именно прорисовка идёт в обратную сторону а кадр один и тот же.

mustaeed 23.07.2009 23:10

Ответ: инвертированная картинка
 
Цитата:

Сообщение от ViNT (Сообщение 111628)
Создавать то создает, только потом, сразу после отрисовки, должна уничтожить.

так это тоже что drawimage(loadimage('/img.png'),0,0);
тоже создаёт на время картинку, прорисовывает а потом удаляет.
но ведь никто не посоветует такой способ, гораздо меньше грузится процессор если заранее подгрузить картинку, и потом её только прорисовывать а не каждый repaint; снова загружать и удалять,
хотя опять же если всё время пользоваться drawimage(loadimage('/img.png'),0,0); то оперативки будет вообще почти не занято.
но зато как всё будет тормозить....

я же хочу и оперативки оптимально использовать и процессор вообще по минимуму.

mustaeed 23.07.2009 23:14

Ответ: инвертированная картинка
 
Цитата:

Сообщение от ViNT (Сообщение 111628)
А для инвертированной отрисовки нужно попиксельно отрисовывать из RGB-массива, что неприемлемо медленно, в отличие от стандартной отрисовки, когда просто происходит копирование всего изображения в один прием.

это получается то что я хочу невозможно.
а как же contra интересно как там всё происходит?

ViNT 24.07.2009 23:04

Ответ: инвертированная картинка
 
Может быть, подобное возможно в более сложных языках(хотя и то врядли), но не в java, там нет прямой работы с памятью.

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


Часовой пояс GMT +4, время: 19:57.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot