Bild im sourcecode

Frank1975

Mitglied
Hallo zusammen,

ist es irgendwie möglich den Code :
Java:
		ImageIcon II = new ImageIcon("./images/Wappen.jpg");
		JLabel logo = new JLabel(II);

so umzubauen, dass ich die Datei als Binärcode im Code selber habe?

in der Art:

Java:
int[] bild = DATA.....
		ImageIcon II = new ImageIcon(bild);
		JLabel logo = new JLabel(II);
 
Sicherlich kannst du das machen. Aber es ist total sinnfrei! Java ist eine Programmiersprache mit der man programmiert und nicht etwas, in das man Daten ablegt.
Was spricht denn dagegen, dieses Bild ganz normal als Datei zu öffnen?
 
Du kannst das Bild in ein byte[] packen und dann mit dem ImageIcon(byte[] imageData) Konstruktor aufrufen. Von der Geschwindigkeit macht das meiner Meinung nach nicht viel aus. Wenn du deine Bilder schützen willst, dann kannst du auch den JPEG Header abändern und fast niemand wird die Datei öffnnen können. Du müsstest die bytes selbstverständlich im Header richtig stellen, bevor du dann als ImageIcon lädst 😉 Viel Sinn sehe ich dabei aber auch nicht.
 
Danke für die Antworten.

Wegen dem "sinnfreisein".. es soll insgesamt ein "EinFileSourceCoceProgramm" werden.

Es gibt ja auch Leute die proggen gerne hin und wieder 64K Demos....

Jedem das Seine.

Daaaanke nochmals !!!!
 
Wie bereits gesagt kannst du die Images auch in die .jar-Datei legen. So wie ich das sehe werden 64k Demos nach Objekt und Quellcode getrennt:

"Bilddatei" enthält: "l:0.0,0.10k,b"


Das Prgramm ließt dann die 2 Koordinaten aus, interpretiert sie anschließend und zeichnet einen schwarzen Stich von den Punkt 0/0 bis zu 0/10000. Bei einem Strich ist das Programm größer als die Bilddatei, aber bei 200 Strichen kann so wesentlich Speicher gespart werden. Ich denke, das ist eine ziemliche Hochleistung, aber die Bilder direkt in den Sourcecode zu stopfen ist meiner Meinung nach Cheating und hat damit nichts zu tun. In Java würde dann nicht so etwas stehen wie "346534674534", was die Pixel und den Farbcode repräsentiert, sondern Polygone uns sonstige Kreise/Quadrate/Striche/usw., die richtige Objekte darstellen und durch programmierte Effekte echt wirken.
 
Denk lieber noch mal drüber nach, was du eben gesagt hast. Jedem das Seine ? Wikipedia

soll das jetzt eine geschichtliche Weiterbildung werden? Eine, ohne weitere Hintergedanken
geschriebene Aussage in dieser Weise zu verknüpfen ist echt abartig.

Was ist denn das für ein Schwachsinn? Für sowas gibt es JARs.

Schwachsinn? Danke... werde ich mir merken. Es ist halt so das JEDER in eine
Jar Datei tausende von Files bringen kann... aber alles in ein bis zwei Codestücken...


Wie bereits gesagt kannst du die Images auch in die .jar-Datei legen. So wie ich das sehe werden 64k Demos nach Objekt und Quellcode getrennt:

"Bilddatei" enthält: "l:0.0,0.10k,b"


Das Prgramm ließt dann die 2 Koordinaten aus, interpretiert sie anschließend und zeichnet einen schwarzen Stich von den Punkt 0/0 bis zu 0/10000. Bei einem Strich ist das Programm größer als die Bilddatei, aber bei 200 Strichen kann so wesentlich Speicher gespart werden. Ich denke, das ist eine ziemliche Hochleistung, aber die Bilder direkt in den Sourcecode zu stopfen ist meiner Meinung nach Cheating und hat damit nichts zu tun. In Java würde dann nicht so etwas stehen wie "346534674534", was die Pixel und den Farbcode repräsentiert, sondern Polygone uns sonstige Kreise/Quadrate/Striche/usw., die richtige Objekte darstellen und durch programmierte Effekte echt wirken.

Danke das ist wirklich eine Gute Idee. Wie zu alten C64 Zeiten. Da musste man sich auch sehr viel damit auseinandersetzen. Ich werde wohl Polygone usw. in den Code integrieren. ggf. knn man ja auch das Ganze in eine Variable packen und dann in Echtzeit entpacken.
 
soll das jetzt eine geschichtliche Weiterbildung werden? Eine, ohne weitere Hintergedanken
geschriebene Aussage in dieser Weise zu verknüpfen ist echt abartig.

*FullACK*

Damals war damals, und heute ist heute. Oder soll ich wenn ich nach Indien fahre mich über jedes Hakenkreuz ärgern das an jeder zweiten Straßenecke zu finden ist? Ne, eben nicht. Die verwenden es in einem anderem Zusammenhang.

*aber gut, back to topic*

@All

Mensch, wenn er als persönliche Herausforderung eine einzige Java file haben will in der alles inkl. Bilder und Co. drin ist, dann lasst ihn doch. Tut doch keinem weh'. Über Sinn und Unsinn zu streiten bringt beide Seiten nicht weiter...
 
Denk lieber noch mal drüber nach, was du eben gesagt hast. Jedem das Seine ? Wikipedia

Ich wußte das nicht, habe aber jetzt mal geschaut, und gelesen dass Werbekampagnen mit diesem Spruch unter einer Welle der Empörung gecancelt wurden... :autsch: Ich wußte ja, dass es Menschen gibt, die in bezug auf das, was als "political correctness" bezeichnet wird, ein Rad ab haben, aber das toppt mal wieder meine bisherigen Erfahrungen. Oder, um das mal mit einem Zitat von Adolf Hitler zu kommentieren: [Zitat anfang] "Interessant" [Zitat ende]. (Na, das wird er doch sicher mal irgendwann irgendwo gesagt haben...!?)


Zum eigentlichen Thema: Man kann das Bild mit
Java:
    private static String createCode(String fileName) throws Exception
    {
        FileInputStream fis = new FileInputStream(fileName);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        int b = 0;
        while (true)
        {
            b = fis.read();
            if (b == -1)
            {
                break;
            }
            baos.write(b);
        }
        fis.close();
        baos.close();
        byte data[] = baos.toByteArray();

        StringBuilder sb = new StringBuilder();
        sb.append("    byte data[] = new byte[]\n");
        sb.append("    {\n");
        sb.append("        ");
        for (int i=0; i<data.length; i++)
        {
            sb.append(String.valueOf((int)data[i]));
            if (i<data.length-1)
            {
                sb.append(", ");
            }
            if ((i+1)%10==0)
            {
                sb.append("\n");
                sb.append("        ");
            }
        }
        sb.append("    };");
        return sb.toString();
    }

in einen String verwandeln, der einen byte-Array beschreibt, den man dann in den Code kopieren kann. Mit
Java:
        ImageIcon imageIcon = new ImageIcon(ImageIO.read(new ByteArrayInputStream(data)));
kann man den dann lesen.

Allerdings muss das Bild sehr klein sein, weil es sich sonst nicht mehr compilieren läßt, außer, wenn man das ganze in mehrere Arrays unterteilt oder so...
 
Ich wußte das nicht, habe aber jetzt mal geschaut, und gelesen dass Werbekampagnen mit diesem Spruch unter einer Welle der Empörung gecancelt wurden... :autsch:
Fand ich auch hart - vor allem wenn man bedenkt, dass Cicero ja wohl kaum das KZ Buchenwald im Kopf gehabt haben wird, als er den Spruch vor mehr als 2000 Jahren berühmt gemacht hat...

Zum Thema: Wie wäre es vielleicht mit den Bytes eines gezippten Bilds? Könnte das nicht vielleicht auch noch eine Einsparung bringen?
 
Code:
 ____   ____   ____   ____   ____   ____   ____
/  __) (____) (____) (____) (____) (____) (__  \
|_|                                          |_|
 _      _                    _       _        _ 
| |    / |       _ __   ___ (_)_ __ | |_     | |
| |    | |      | '_ \ / _ \| | '_ \| __|    | |
|_|    | |      | |_) | (_) | | | | | |_     |_|
 _     |_|      | .__/ \___/|_|_| |_|\__|     _ 
| |             |_|                          | |
| |                                          | |
|_|     ____           _          _          |_|
 _     / ___| ___   __| |_      _(_)_ __      _ 
| |   | |  _ / _ \ / _` \ \ /\ / / | '_ \    | |
| |   | |_| | (_) | (_| |\ v  v /| | | | |   | |
|_|    \____|\___/ \__,_| \_/\_/ |_|_| |_|   |_|
 _                                            _ 
| |__   ____   ____   ____   ____   ____   __| |
\____) (____) (____) (____) (____) (____) (____/
1 Point Godwin zum Ausschneiden, bitte schön. Und jetzt zurück zum eigentlichen Thema.😉
 
Denk lieber noch mal drüber nach, was du eben gesagt hast. Jedem das Seine ? Wikipedia


Was ist denn das für ein Schwachsinn? Für sowas gibt es JARs.

haha finde ich so lächerlich. Solange es keine von den Nazis erdachten Propaganda-sprüche sind, werde ich nicht darauf verzichten teils viel viel ältere Zitate zu verwenden. Und ich verstehe auch nicht wie die Firmen dann auch noch den Schwanz einziehen, und ihre teuren werbekampagnen zurückziehen. :bloed:
 
@Frank1975
die meisten Menschen hier denken in schon gut durchgetrampelten Pfaden (Designrichtlinien) und versuchen das auch den anderen zu raten. Wenn Du dich also mit der Machete durch den Dschungel kämpfen willst, also Kunst- oder Experimentalcode erstellst, musst Du es auch gleich am Anfang sagen und den anderen nicht vorwerfen, dass sie nicht das sagen, was Du hören willst.

Vor ~10 Jahren habe ich mal eine 20MB .class Datei runtergeladen. Wenn man es ausführte, was es ein kompletter Installer für ein Java-Programm. Ich glaube, das war noch bevor es JARs gab. Wiedergesehen habe ich so was nicht mehr, aber ich denke es wäre möglich jeder Class-Datei beliebige Daten anzuhängen, nach dem Ende des Binärcodes. So könnte man ein Eine-Class-Datei Programm erstellen.

Doch ich glaube der einfache und saubere Weg wäre über ein JAR. Wenn man nicht will, dass jemand drin rumpfuscht, kann man seine Sachen verschlüsseln. Für Java Code gibt es Obfuscatoren, Binärdaten kann man selber verstecken. Für ein J2ME-Spiel habe ich mal alle Grafiken in eine einzige Datei gepackt und diese mit einer XOR-Verschlüsselung kodiert. Zusätzlich den CRC-Wert im Programm fest abgelegt. Auf diese Weise konnte es nur noch ein Hacker verändern und so einer würde auch keine Probleme mit in Variablen abgelegten Bildern haben.

Slawa
 
Ich habe zwar nie so ein Programm geschrieben, aber wie ich bereits geschrieben habe, wird dort eher mit Zeichencodes gearbeitet. Ein Beispiel dafür ist UMLet. Dort wird wie in diesen Screenshoot zu sehen die ASCII Zeichen "-->" intepretiert und dann durch Klassen wie java.awt.Polygon auf den Bildschirm gedruckt. Ein simples Beispiel stellt BlueJ zur Verfügung. Dort gibt es eine Klasse "Kreis", "Quadrat", "Rechteck", "Dreieck" und "Leinwand". Mit diesen Klassen lassen sich vorerst einfache Bilder malen:

Dreieck(rot) + Quadrat(Schwarz) = Haus
Kreis(Gelb) = Sonne
mehrere Dreiecke(Grün) = Berge
Rechteck(Braun) + Kreis(Grün) = Baum

Eine Sonne ist nun aber nicht Gelb. Nun könnte man aber vom Kreis erben (oh Schreck: Objektorientierung) und ein paar Filter einbauen, sodass ein besserer Effekt zustande kommt 😉
 
Der Gedanke kompakte Programme zu schreiben findet man in der "Demoszene". Da gibt es richtige Wettbewerbe, mit dem Ziel das kleinst und gleichzeitig eindrucksvollste Programm zu entwickeln. Über das Schlüsselwort "Procedural Content Generation" hab ich viel Information gefunden - hab mich bisher aber noch nicht intensiv genug damit beschäftigt um mehr darüber sagen zu können.
 
Ja, irgendwann hatte ich mal eine bestimte 256byte-demo gefunden, die ich total beeinduckend fand, aber jetzt auf die Schnelle finde ich sie nicht mehr (es gibt aber etliche, die einen Blick wert sind:
http://www.pouet.net/prodlist.php?type[]=256b&page=1 (copy & paste))


Interessant sind auch solche Sachen wie .theprodukkt - Ein 3D-Shooter mit 96 Kilobyte. (Kein Schreibfehler).
 
Ja, .kkrieger ist schon interessant. Ist schon erstaunlich, was man alles mit 96k anstellen kann.🙂
 
@Frank1975
die meisten Menschen hier denken in schon gut durchgetrampelten Pfaden (Designrichtlinien) und versuchen das auch den anderen zu raten. Wenn Du dich also mit der Machete durch den Dschungel kämpfen willst, also Kunst- oder Experimentalcode erstellst, musst Du es auch gleich am Anfang sagen und den anderen nicht vorwerfen, dass sie nicht das sagen, was Du hören willst.

Slawa

Das finde ich nicht. Es liegt nicht an dem Fragenden, sondern wie die Antwortenden antworten. Ich finde man muss nicht gleich lospöbeln, nur weil einer ein Bild in seinen Sourceode laden will. Leider ist das in Foren üblich (Bsp: "Du Troll!")

Ich finde sowas respektlos. Bevor man lospöbelt sollte man genauer nachfragen. Am besten garnicht pöbeln 😀

Meine Meinung.
 
Öööhi, 😡 spiel' hier ma nich' den Ober-Aufpasser vom Dienst! :exclaim:

:joke:

Mal im ernst, ich hatte das schonmal in einem anderen Thread so ähnlich gesagt: Wenn hier jemand fragt: "Wie kann man mit einer Tasse einen Nagel in die Wand hauen?" - Dann hat man im wesentlichen drei Möglichkeiten: Man kann antworten
1. "Das macht keinen Sinn, nimm einen Hammer"
2. "Du mußt die Tasse vorher mit kohlefaserverstärktem Kevlar verkleiden"
3. "Du könntest die Tasse mit kohlefaserverstärktem Kevlar verkleiden, aber das macht keinen Sinn, und du solltest lieber einen Hammer verwenden"

Ich versuche meistens, die dritte Möglichkeit zu wählen 🙂
 
Öööhi, 😡 spiel' hier ma nich' den Ober-Aufpasser vom Dienst! :exclaim:

Das tuh ich nie. Ich stehe nur denen bei, die von Leuten immer wieder getreten werden, und das meistens grundlos, nur weil sie eine Frage stellen, die andere belächeln und sich darüber lustig machen.

Ich wüßte nicht was daran verwerflich oder Ober-Aufpasser mässiges ist. Für meinen Teil bin ich lieber gutmütig als gleich jemanden einen nervigen Kommentar an den Kopf zu werfen.
 
kkrieger hat damals meinen rechner abstürzen lassen ... trau' mich net es nochmal auf neuer hardware auszuprobieren

Generell finde ich den ansatz bilder im sourcecode nicht schlecht. hab ich mich auch schon mit beschäftigt. für icons ist das ne gute methode um nicht gleich jedem zu zeigen wo das artwork liegt.

und wenn c++ bilder miteinkompilliert regt sich ja auch keiner drüber auf. aber mal ehrlich, von den drei eben geposteten antwortmöglichkeiten gibt es hier so ein, zwei moderatoren die eher die erste bevorzugen. wobei die dritte möglichkeit die offensichtlich höflichste ist!


gruß
 
Statische Bilder im Source halte ich auch für Sinn befreit. Wenn dann eher als Grundlage für andere Bilder zur Kombination um neue zu erzeugen wie es bei besagten Demos unter anderem genutzt wird. Wobei dort sehr vieles auch über diverse Formeln und Synthesen erzeugt wurde.

Wobei so 4k Games schon sehr fein sind ^^
MegaMan 4kb: [done!] MEG4kMAN, Mega Man in 4kb
MegaMan 4kb (Speed Run): YouTube - Let's Play - Megaman4k

Wie immer, eine beeindruckende Arbeit von Markus Persson.
 
Bei den Mini-Spielen wird ja auch meistens alles generiert und nicht "geladen". Genau die gleiche geschichte bei der Programmierung für frühere Handys, wo man eh nur begrenzt Speicher hatte. Außerdem sollte man ja auch nicht pe-ressourcen mit "bild einfach mal im Array speichern" verwechseln.
 
Allein aus Speichergründen wäre das Codieren von Bilddaten im Sourcecode wohl auch kontraproduktiv - schließlich hat man die Daten dann ja zweimal im Speicher: einmal als geladenen Bytecode und dann als zur Laufzeit aus dem Code generierte Image-Struktur auf dem Heap.
 

Zurück
Oben