![]() |
Хранение картинок в классах
Целую ночь лажу в интернете, но так и не нашёл ответ на вопрос: как хранить картинки (и вообще разные ресурсы) внутри классов? Первое и последнее, что пришло на ум - хранить картинку в виде hex строки и из неё создавать имэдж. Но я не знаю как это сделать :dontknow: ... Также терзает мысль, что можно даже не строку хранить, а просто каким-то образом в креатИмэдж засунуть 0xHEXBYTESPICTURES... В общем, помогите...
|
Ответ: Хранение картинок в классах
Записать данные напрямую похоже не получится - пробовал по-разному записывать данные в класс - мидлет не запускается, видимо, класс получается некорректным. С exe-шниками, помню, такое делал, а с .class не получается.
Если только переводить ресурс в HEX, но тогда он будет занимать в 2 раза больше места и декодироваться будет долго. |
Ответ: Хранение картинок в классах
как вариант хранить в int массиве, только он должен быть
final static int чтобы компилятор его за константу принял. Одно число это 4 байта. |
Ответ: Хранение картинок в классах
Все равно надо писать программу, формирующую этот самый массив, хотя это уже ерунда. Кстати, интересно, дельфовский TColor это то же самое, что и числа в массиве RGB в java, или там байты переставлены?
|
Ответ: Хранение картинок в классах
Цитата:
как вариант хранить в int массиве, только он должен быть Цитата:
|
Ответ: Хранение картинок в классах
Массив RGB в текстовом виде кода джавы из картинки я могу на PHP сделать =)
|
Ответ: Хранение картинок в классах
Цитата:
|
Ответ: Хранение картинок в классах
А я Делфи не знаю и компилятора нет у меня...
|
Ответ: Хранение картинок в классах
Только вот как в массив вносить? Каждый пиксель отдельно? Типа так:
PHP код:
|
Ответ: Хранение картинок в классах
final static int arr[] = {0x00001, 0x00003};
|
Ответ: Хранение картинок в классах
Ааа... А чем final отличается от public? А то я везде public пишу... Уфф... Джава такая сложная, по мне так в ней много лишнего и мало нужного...
- - - Пардон, немного не так вопрос задал. Ща исходники смотрел, можно использовать и паблин и финал одновременно... Но что такое финал я так и не понял. |
Ответ: Хранение картинок в классах
Вложений: 1
Вот программка, переносишь на неё bmp-файл, и получашь в той же папке файл "<имя_файла_изображения>.java" вида
PHP код:
PHP код:
В проекте MP пишешь: PHP код:
P.S. Модели RGB в java и Delphi не совпали, пришлось байты переставлять. P.P.S. final это то же самое, что и const в паскале. |
Ответ: Хранение картинок в классах
Стоп, стоп, стоп. Я не на мидлет паскале пишу. Точнее... Я, короче, декомпилировал FW.class и M.class (обэчный Хэллоу Ворлд), немного их изменил и на основе их пишу на Джаве, вообще без паскаля =) А за программку спасибо, как раз собирался только что скрипт писать =) Сейчас разберусь, заюзаю =)
|
Ответ: Хранение картинок в классах
А зачем нужно, чтобы компилятор за констатнту принимал этот массив? А если мне нужно мнооого картинок создать, то придётся несколько констант создавать? Телефон от этого не упадёт? А то бы я просто обычный массив использовал и все картинки по очереди в него перезаписывал...
- - - А может можно как-то сразу скормить перечисление пикселов в Image.createRGBImage? Чтобы и не создавать переменной новой в программе? Примерно так: PHP код:
- - - О_о Я кажется понял, зачем нужно константу создавать. Компилятор её заменяет на значение, а JVM потом не требуется выделять память под хранение константы. Верно? |
Ответ: Хранение картинок в классах
Все равно их нужно где-то хранить, в константном массиве проще всего.
|
Ответ: Хранение картинок в классах
Код:
b.java:38: code too large - - - Сделал картинку в четыре раза меньше, всё создало, откомпилировало, но мидлет не запускается. Эмулятор сразу при попытке запуска закрывается. Видимо, мы к решению этого вопроса неправильно подошли... Каким-то образом ведь делают так. Пойду декомпильну что-нибудь, может поможет =) |
Ответ: Хранение картинок в классах
У меня появилась другая идея =) Как можно считать картинку из файла и преобразовать в объект Image?
|
Ответ: Хранение картинок в классах
Цитата:
PHP код:
Кстати, есть еще вариант: закодировать бинарник PNG чем-нибудь в роде base64 и записать как строковую константу. Места будет занимать мало, только декодировать обратно придется. |
Ответ: Хранение картинок в классах
Изображения хочу хранить в классе, чтобы достать их оттуда было непросто =) Ща думаю просто записать в один файл все картинки по очереди без префиксов, а после считать файл из класса, отделить все картинки одну от другой, приделать к каждой префикс, который убрал до записи в файл и создать объект Image.
Твой способ, вроде, не пройдёт... Я половину функций из твоего примера не знаю, но, как я понял, у тебя из потока как бы объект создаётся. К нему, наверно, не получится добавить префикс... Префикс - это, грубо говоря, набор байт или строка. Вот. Что посоветуешь? |
Ответ: Хранение картинок в классах
Тогда так:
PHP код:
Потом создаем из него Image. А если уж очень надо спрятать, тогда лучше шифровать чем-нибудь. |
Ответ: Хранение картинок в классах
Ну base64 открытый алгоритм, кто угодно на вид сразу догадается попробовать обратить. Да и от шифрования скорость упадёт. Спрятать нужно не особо. Защиты от дурака хватит =) Попробую с массивом байт.
|
Ответ: Хранение картинок в классах
Цитата:
|
Ответ: Хранение картинок в классах
b.java:49: cannot find symbol
symbol : class FileConnection location: class b FileConnection con=(FileConnection) ^ b.java:49: cannot find symbol symbol : class FileConnection location: class b FileConnection con=(FileConnection) ^ 2 errors - - - Хы, тут тема где-то про картинки в файлах есть, моё сообщение последнее. Я подошёл к расшифровке картинок с полной ответственностью =) О_о |
Ответ: Хранение картинок в классах
Этому коду нужен класс javax.microedition.io.file.FileConnection
|
Ответ: Хранение картинок в классах
import javax.microedition.io.*; я написал. Не работает. Не может же быть, что... Что у меня его в компиляторе НЕТ О_о ???
|
Ответ: Хранение картинок в классах
Скорее всего, нет пакета JSR75 API.
Хотя стоп. Имеется в виду чтение из внешнего файла или из ресурса? |
Ответ: Хранение картинок в классах
еще один из способов, замена заголовка %PNG на другие символы или просто удаление, тогда практически все просмотрщики пасуют.
|
Ответ: Хранение картинок в классах
Немного не по теме, кто знает, чем редактировать изображения в формате *.bsprite? Не помню, в какой игрушке я это видел, если вспомню, выложу линк.
|
Ответ: Хранение картинок в классах
Цитата:
Скорее всего, либо RAW-данные наподобие BMP, либо сжатые данные, наподобие ZIP. Увидеть бы сам файл. |
Ответ: Хранение картинок в классах
Цитата:
Цитата:
- - - Зацените, какое я тут расследование провёл: http://forum.boolean.name/showthread...newpost&t=2086 А то обидно, я часа полтора ковырялся, а никто даже не отписался =( |
Ответ: Хранение картинок в классах
Вот, нашел: 2007_Real_Football
|
Ответ: Хранение картинок в классах
|
Ответ: Хранение картинок в классах
Чтение из ресурса делается примерно так:
PHP код:
Здесь - MyMIDlet - главный класс мидлета, instance - экземпляр главного класса. P.S. на счет bsprite - явно нестандартный формат. Единственно возможный вариант - попытаться расковырять java - код, но это будет сложно, т.к. мидлет обработан обфускатором. |
Ответ: Хранение картинок в классах
Вот в этой игрушке, по-моему, картинки лежат в классах.
|
Ответ: Хранение картинок в классах
Цитата:
|
Ответ: Хранение картинок в классах
ViNT, всё компилится, но мидлет повисает при запуске с белым экраном. Картинка не рисуется...
- - - Убрал эту строку: G.drawImage(Image.createImage(img,0,img.length),10 ,10,G.LEFT|G.TOP); мидлет выполняется, не повисает. Что у меня в ней не так? img - это массив байт, который возвращается твоей функцией. - - - Эх... Написал так: PHP код:
in.read(img); по какой-то причине не работает... В качестве ресурса пытаюсь открыть иконку "/icon.png", которая лежит в jar'е... В чём проблема - ума не приложу... - - - СДЕЛАЛ!!! Yahoo!!! После строки byte[] b = null; добавил b = new byte[284]; 284 - это вес иконки =) Только вот вопрос... А если я наперёд не знаю, сколько весит файл, то как тогда делать? - - - Как сделать байтовый массив с заполнением? PHP код:
|
Ответ: Хранение картинок в классах
Да забыл инициализировать byte[] b.
А делается это так: PHP код:
|
Ответ: Хранение картинок в классах
Уф... Так. Всем спасибо =) Чуть позже, как доделаю, покажу, что получилось. Я тут больше суток тупо сидел и не мог найти ошибку в нескольких строках кода. Всё компилируется, но работает не так, как надо. В итоге, только что понял в чём была ошибка. Я решил хранить ресурсы (картинки) в файле с расширением .class, типа для большего запутывания потенциального взломщика моей мега программы =) Но картинка из всего этого не собиралась! Чуть монитор в окно не выбросил от разочарования в себе... Потом... Только что то есть... Поменял расширение с class на png И ВСЁ ЗАРАБОТАЛО!
Такой вопрос: а в джаве что, имеет какое-то значение расширение файла??? Как я понял, его просто не считывало в байтовый массив! ПОЧЕМУ? Блин, я сутки искал ошибку там, где её не было... Сейчас ещё поиграюсь с расширениями, png не хочу оставлять. |
Ответ: Хранение картинок в классах
Расширение значения не имеет, но может именно на использование .class JVM не дает разрешения.
|
Ответ: Хранение картинок в классах
Phantom , Интересует нарытое))?? ХДЕЕЕЕ?????
|
Ответ: Хранение картинок в классах
Цитата:
Тред вообще можно снести, чтобы мне не приходилось краснеть. :-D |
Часовой пояс GMT +4, время: 16:36. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot