Newsgroup: it.comp.java
Titolo: bmp direttamente nel byte code ?

Come da oggetto mi piacerebbe sapere se esiste un modo per inserire una bmp
direttamente nel byte code dei miei programmi.
Ciao



Ciao
una tecnica che ho visto fare in C (Programmazione Grafica 3d - Andrea
Fasano) è quella di ricreare il codice che riempie la matrice dei dati. 
In Java dovresti quindi costruire un convertitore "Image -> java", che
data ad esempio una BufferedImage crea un file con il codice java necessario a
"disegnarla" nuovamente. Una tecnica banale può essere quella di ciclare
i pixel, catturandone il valore rgb, e aggiungere ogni volta una riga
tipo:
myImg[x,y] = coloreAttuale;
Una volta ottenuta tutta questa serie di righe, la copi dentro un metodo
della tua classe con tipo di ritorno ad es. Image (naturalmente
aggiungendo le operazioni di "costruzione" necessarie), ed ecco che all'atto
della compilazione il codice della tua immagine è dentro il bytecode :-).
...ovviamente se il tuo unico scopo era quello di non avere file immagine
"a spasso" è molto + semplice creare un .jar e buttare tutto lì dentro. A
meno che tu non voglia rendere difficile la vita a chi volesse
sostituirti le immagini sotto il naso, e in questo caso questa può essere
una buona -forse non "invalicabile"- soluzione.
... tanto per dirne una :))
Ciao :-)
pole

 una bmp direttamente nel byte code dei miei programmi.
Certamente - basta mettere i dati in un array di byte.
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 ha scritto nel messaggio
news:Xns92426234EFC3Acr...@130.133.1.4...


 accidenti questo commento, ma tanto per ricordare i vecchi tempi :-)
Su Win puoi fare:
copy /b nomeclasse.class+img1.jpg+img2.jpg+img3.jpg nomeclasse.jpg
E dovrebbe andare. Tieni conto che se appendi dei file non dovresti avere
comunque alcun limite di dimensioni, perche' il classloader carica solamente
il bytecode.
Andrea

 fino a EOF. 
Non ho mai provato, ma immagino dia errore. Il formato .class ha una 
struttura specifica, e se non ricordo male, un checksum. :-)


 struttura specifica, e se non ricordo male, un checksum. :-)
Il bytecode ha una lunghezza specifica, il codice eseguito e' contenuto
in questa porzione, che il classloader provvede a caricare. Tutto cio'
che v'e' dopo viene (al momento) ignorato. Non credo poi che vi
alcun checksum.
Andrea

 alcun checksum.
La specifica dice chiaramente: "A class file contains a single ClassFile 
structure", e poi descrive la struttura - che ha una lunghezza finita, 
determinata dalla dimensione del costant pool piu' frattaglie 
(
http://java.sun.com/docs/books/vmspec/html/ClassFile.doc.html
) 
Che poi alcune implementazioni controllino o meno, e' un altro discorso - 
ma certamente attaccare bytes ad un formato binario ben preciso non e' una 
tecnica che raccomanderei.


 tecnica che raccomanderei.
Non ho detto che e' raccomandabile, solo che e' possibile :)
Basta provare con il JDK della SUN (che e' la implementazione
di riferimento). Naturalmente puo' funzionare oggi e domani
con la versione 1.4.2 non funzionare piu'.
Per quanto riguarda il checksum, non credo ve ne siano al momento.
Si puo' modificare il nome della classe modificando opportuni campi
del constant pool (la stringa UTF referenziata dal campo "this") senza
incorrere in problemi durante le verifiche del bytecode, compiere
ogni sorta di modifica, senza dover poi modificare un bit di tutto
il resto. Vedi BCEL, che credo sia scritto in Java, e altre librerie, in
C++.
Andrea

):
| The class file must not be truncated or have extra bytes at the end.
-- Dario