# Bild im sourcecode



## Frank1975 (30. Jun 2010)

Hallo zusammen,

ist es irgendwie möglich den Code :

```
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:


```
int[] bild = DATA.....
		ImageIcon II = new ImageIcon(bild);
		JLabel logo = new JLabel(II);
```


----------



## agentone (30. Jun 2010)

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?


----------



## Ruzmanz (1. Jul 2010)

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.


----------



## Frank1975 (1. Jul 2010)

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 !!!!


----------



## Antoras (1. Jul 2010)

Frank1975 hat gesagt.:


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


Dann bau dir ein Jar-Archiv, dann hast auch nur eine Datei.



Frank1975 hat gesagt.:


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


Das ist in der Regel dann aber keine vernünftig programmierte Software mehr.


----------



## agentone (1. Jul 2010)

Frank1975 hat gesagt.:
			
		

> Jedem das Seine.


Denk lieber noch mal drüber nach, was du eben gesagt hast. Jedem das Seine ? Wikipedia



> EinFileSourceCoceProgramm


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


----------



## Ruzmanz (1. Jul 2010)

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.


----------



## Frank1975 (12. Jul 2010)

agentone hat gesagt.:


> 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.



agentone hat gesagt.:


> 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...




Ruzmanz hat gesagt.:


> 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"
> 
> ...



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.


----------



## Quaxli (13. Jul 2010)

Frank1975 hat gesagt.:


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



Ist das für einen Wettbewerb? Die, die ich kenne, beziehen sich aber meist doch auf die Größe der JAR-Datei. Da wird dann noch mit zusätzlichen Packprogrammen, etc. gearbeitet.


----------



## tuxedo (13. Jul 2010)

Frank1975 hat gesagt.:


> 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...


----------



## Marco13 (13. Jul 2010)

agentone hat gesagt.:


> 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

```
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

```
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...


----------



## Guybrush Threepwood (13. Jul 2010)

Na, dieser Thread hat ein gewisses Potential zur Erfüllung von Godwin?s law ? Wikipedia.

Davon abgesehen: Wieso nicht? Eine kleine Grafik könnte man als Byte-Array ablegen und wieder in ein Bild umwandeln. Gibt sicher bessere Lösungen, aber wer's mag ...


----------



## Gastredner (13. Jul 2010)

Marco13 hat gesagt.:


> 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?


----------



## Marco13 (13. Jul 2010)

Guybrush Threepwood hat gesagt.:


> Na, dieser Thread hat ein gewisses Potential zur Erfüllung von Godwin?s law ? Wikipedia


Daran dachte ich auch sofort, war aber der Meinung, dass er es eigentlich schon soweit erfüllt hat... Aber man darf es ja nicht nennen, sonst gilt es nicht


----------



## Gastredner (13. Jul 2010)

```
____   ____   ____   ____   ____   ____   ____
/  __) (____) (____) (____) (____) (____) (__  \
|_|                                          |_|
 _      _                    _       _        _ 
| |    / |       _ __   ___ (_)_ __ | |_     | |
| |    | |      | '_ \ / _ \| | '_ \| __|    | |
|_|    | |      | |_) | (_) | | | | | |_     |_|
 _     |_|      | .__/ \___/|_|_| |_|\__|     _ 
| |             |_|                          | |
| |                                          | |
|_|     ____           _          _          |_|
 _     / ___| ___   __| |_      _(_)_ __      _ 
| |   | |  _ / _ \ / _` \ \ /\ / / | '_ \    | |
| |   | |_| | (_) | (_| |\ v  v /| | | | |   | |
|_|    \____|\___/ \__,_| \_/\_/ |_|_| |_|   |_|
 _                                            _ 
| |__   ____   ____   ____   ____   ____   __| |
\____) (____) (____) (____) (____) (____) (____/
```
1 Point Godwin zum Ausschneiden, bitte schön. Und jetzt zurück zum eigentlichen Thema.


----------



## Vayu (13. Jul 2010)

agentone hat gesagt.:


> 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:


----------



## slawaweis (13. Jul 2010)

@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


----------



## Ruzmanz (13. Jul 2010)

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


----------



## Antoras (13. Jul 2010)

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.


----------



## Marco13 (14. Jul 2010)

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).


----------



## Gastredner (14. Jul 2010)

Ja, .kkrieger ist schon interessant. Ist schon erstaunlich, was man alles mit 96k anstellen kann.


----------



## Friedhelm (13. Aug 2010)

slawaweis hat gesagt.:


> @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.


----------



## Marco13 (13. Aug 2010)

Ööö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


----------



## Friedhelm (13. Aug 2010)

Marco13 hat gesagt.:


> Ööö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.


----------



## slawaweis (13. Aug 2010)

Friedhelm hat gesagt.:


> ... Für meinen Teil bin ich lieber gutmütig als gleich jemanden einen nervigen Kommentar an den Kopf zu werfen.


ich habe übrigens auch was zum Thema geschrieben, als einfach nur "rumzupöbeln".

Slawa


----------



## Marco13 (14. Aug 2010)

"Lattice" nannte sich das, was ich meinte. Aber Lattice wird von dem hier sogar noch getoppt: Puls by Rrrola.  Ich find das ZU krass :bahnhof:


----------



## Empire Phoenix (14. Aug 2010)

du meinst kkrieger oder ? ist wirklich mal spielenswert/anschauenswert


<Edit> dammit da war ja ncoh ne zweite seite ^^ <edit>


----------



## imho1001 (17. Aug 2010)

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ß


----------



## Evil-Devil (17. Aug 2010)

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.


----------



## Quaxli (17. Aug 2010)

Wen sowas interessiert, der könnte sich auch mal auf JavaGaming.org - Index umsehen. Dort ist immer wieder mal ein entsprechender Wettbewerb.


----------



## XHelp (17. Aug 2010)

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.


----------



## Murray (18. Aug 2010)

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.


----------



## Empire Phoenix (18. Aug 2010)

NeoTextureEdit - Procedural Texture Editor
würde ich empfehlen, soweit ich das sehe kann man das Teil auch zum laden für die eigenen Engine benutzen, wobei eine class haste dann nicht, wenn das das Ziel ist (ausser du schreibst das ganze um).


----------

