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

agentone

Bekanntes Mitglied
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

Top Contributor
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

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

Ruzmanz

Top Contributor
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

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

tuxedo

Gast
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

Top Contributor
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...
 
G

Gastredner

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

Gastredner

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

Vayu

Gast
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

Bekanntes Mitglied
@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

Top Contributor
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

Top Contributor
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

Top Contributor
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).
 
G

Gastredner

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

Friedhelm

Bekanntes Mitglied
@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 :D

Meine Meinung.
 

Marco13

Top Contributor
Öööhi, :mad: 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

Bekanntes Mitglied
Öööhi, :mad: 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.
 
I

imho1001

Gast
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

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

XHelp

Top Contributor
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

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S Wie kann ich ein Bild in einen Frame einfügen? Spiele- und Multimedia-Programmierung 2
U DPI von einem Bild definieren Spiele- und Multimedia-Programmierung 5
J Bild ohne Quallitätsverlust skalieren Spiele- und Multimedia-Programmierung 11
Silvascus Bild --> JFrame Hintergrund Spiele- und Multimedia-Programmierung 3
D getsubimage aus BufferedImage und Rueckwandlung in ein ImagePlus bild Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
windl EXIFF Header in ein Bild schreiben Spiele- und Multimedia-Programmierung 0
L Bild in Richtung Maus drehen Spiele- und Multimedia-Programmierung 4
B Bild ohne Image auf die Festplatte streamen Spiele- und Multimedia-Programmierung 4
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
F [JMyron] Bild von int[] zu BufferedImage Spiele- und Multimedia-Programmierung 2
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
K Bild von USB-Webcam über JMF Spiele- und Multimedia-Programmierung 2
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
P Bild Pixelweise auslesen Spiele- und Multimedia-Programmierung 13
K Bild berührt Bild Spiele- und Multimedia-Programmierung 29
aze Nicht rechteckiges Bild zeichnen Spiele- und Multimedia-Programmierung 5
A Bild einer Webcam auffangen Spiele- und Multimedia-Programmierung 20
B Generierung einer Wertetabelle aus einem Bild Spiele- und Multimedia-Programmierung 3
lumo LWJGL - Bild rendern Spiele- und Multimedia-Programmierung 16
A .jpg-Bild auf andere Position verschieben Spiele- und Multimedia-Programmierung 4
F Bild einfärben Spiele- und Multimedia-Programmierung 5
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Q Rechteck in BIld suchen Spiele- und Multimedia-Programmierung 8
M Bild kopieren Spiele- und Multimedia-Programmierung 2
S Bild capturen mit direcShow Spiele- und Multimedia-Programmierung 2
B Character Bild links/rechts Spiele- und Multimedia-Programmierung 19
Developer_X Bild Größe einstellen Spiele- und Multimedia-Programmierung 2
ARadauer bild in bild suchen Spiele- und Multimedia-Programmierung 6
M 2D - Bild um y-Achse drehen Spiele- und Multimedia-Programmierung 9
S Bild spiegeln Spiele- und Multimedia-Programmierung 7
N Farberkennung und -ersetzung in einem Bild Spiele- und Multimedia-Programmierung 2
G Palette aus Bild extrahieren Spiele- und Multimedia-Programmierung 5
A Wasserzeichen auf Bild Spiele- und Multimedia-Programmierung 2
G Paintsurface ins Bild konvertieren Spiele- und Multimedia-Programmierung 8
M Sich nach links verschiebendes Bild Spiele- und Multimedia-Programmierung 2
F Bild generieren Spiele- und Multimedia-Programmierung 3
J Animation hinter transparentem Bild auf der GlassPane Spiele- und Multimedia-Programmierung 6
A Kein Bild Spiele- und Multimedia-Programmierung 3
T Bild als mehrdimesionaler Array Spiele- und Multimedia-Programmierung 4
H Bild von Webcam laden Spiele- und Multimedia-Programmierung 4
P Bild, Pixel- / Bereichsfarbe auslesen Spiele- und Multimedia-Programmierung 12
G start Bild einfrügen in ein Java Spiel Spiele- und Multimedia-Programmierung 7
Quaxli off-topic: HDR-Bild errechnen Spiele- und Multimedia-Programmierung 3
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
G Auf Tastendruck bild verschieben Spiele- und Multimedia-Programmierung 5
O ich hab da ein problem mit nem bild Spiele- und Multimedia-Programmierung 8
C JPEG oder BMP Bild erstellen Spiele- und Multimedia-Programmierung 5
A Bild im Raum darstellen (Texture2D) Spiele- und Multimedia-Programmierung 4
V Wie berechnet man das Bild eines Schwarzen Loches in Java? Spiele- und Multimedia-Programmierung 10
K Einzelne Pixel in einem Bild lesen Spiele- und Multimedia-Programmierung 5
N Bild zu zeichnen (drawImage) klappt nur manchmal?? Spiele- und Multimedia-Programmierung 8
P repaint verschiebt das Bild Spiele- und Multimedia-Programmierung 2
S BMP-Bild Pixel für Pixel bearbeiten Spiele- und Multimedia-Programmierung 1
P 2D Bild drehen Spiele- und Multimedia-Programmierung 4
M durchsichtiges Bild nach clearRect Spiele- und Multimedia-Programmierung 8
M RGB-Bild in Graustufen-Bild umwandeln Spiele- und Multimedia-Programmierung 2
M Bild-Spiegelung mit Java! Spiele- und Multimedia-Programmierung 5
S Bild auf Bild = Nichts? Spiele- und Multimedia-Programmierung 3
S Bild in Speicherbild zeichnen = Nichts? Spiele- und Multimedia-Programmierung 3
N Bild im Panel ändern Spiele- und Multimedia-Programmierung 3
D nicht 4-eckiges bild auf Hintergrund bewegen Spiele- und Multimedia-Programmierung 2
R Bild drehen Spiele- und Multimedia-Programmierung 24
J Bild generieren Spiele- und Multimedia-Programmierung 5
X Bild auf aktueller position drehen Spiele- und Multimedia-Programmierung 2
K Java2d Bild als JPG oder so speichern Spiele- und Multimedia-Programmierung 10
L wo sehe ich die Range und die Hitbox im Minecraft Sourcecode? Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben