# Hex Werte in Bitmap Raster darstellen



## Jeykas (8. Apr 2011)

Hallo,
ich habe in Google und auch hier im Forum gesucht aber leider nichts gefunden.

Ich muss Hex werte in eine List oder Array( egal welches, wobei List besser wäre, da ich sie im nachhinein besser erweitern kann, und ich nicht so viel performance brauche wie sie Array hergeben würde) schreiben. etwa so :

List[] werte = new List[];
werte = {1F, 1B,13,15,13,1F,00};

So diese sollen jetzt in einem 8x8 bitmap dargestellst werden, unzwar so das die stellen die in "werte" angegeben sind mit schwarz ausgefüllt wird und der rest weiß bleibt.
Ich habe verschiedenes versucht, doch leider will es nicht so richtig klappen...

Ich habe an :
-DataBufferInt
-compatibleWritableRaster rast = Raster.createCompatibleWritableRaster(DataBuffer)
-BufferedImage -> setData(rast)

also so was gedacht... 






so etwas halt nur kleiner...

um genau zu sein möchte ich das darstellen 





HILFE


----------



## SlaterB (8. Apr 2011)

was ist denn konkret dein Ziel, brauchst du ein Image-Objekt, welches du letztlich auf der Festplatte speichern willst
oder möchtest du die Daten in einer Swing-GUI visualisieren?


----------



## Jeykas (8. Apr 2011)

Ich möchte eine List erstellen, in der sollen solche Bitmaps mit Sonderzeichen (wie das bsp oben) sein und zudem noch das albphabet. Am ende, wenn ich zum Beipsiel das wort hallo schreiben will, sollen die zeichen aus dieser List geholt und einem Label oder ImageFeld nebeneinander dargestellt werden...

zwischen den Buchstaben können auch sonderzeichen auftauchen, deswegen soll jedes zeichen als bitmap in der list stehen...
ein satz wäre dann eine aneinandereihung von bitmaps...


----------



## SlaterB (8. Apr 2011)

eine Liste hast du doch schon, was du darin als Elemente speicherst kannst du dir komplett aussuchen,
das musst ja nur du selber wieder interpretieren, ob eine einzelne Zahl, ein Array, ein String, eine eigene Klasse,
alles kann je nach Aufwand und Genauigkeit entweder direkt als ein bestimmter Buchstabe oder eben als eine Menge von Bits interpretiert werden,
hast du dazu eine Frage?

oder eben das andere Thema wäre, aus deinen Daten (nicht die Liste, sondern ein einzelnes 'Ding', in welcher Form auch immer)
etwas darzustellen, danach hatte ich gefragt, deine Antwort ist bisschen dünn,
'in einem Label darstellen' -> als normaler Text, char, String? oder ein Bild in einem Label?
'ImageFeld' -> dieser Begriff ist mir und übrigens auch google unbekannt


----------



## Jeykas (8. Apr 2011)

ok, stell dir das mal vor pixel = {1F,13,15,13,15,13,1F,00};
Das ist die Darstellung für das inverse B als Bitmap.
Nur wie stelle ich das dar ?
dieses Bitmap will ich als Image in einem Label oder Canvas oder was auch immer ( irgendwie auf dem Frame ausgeben, womit ist eigentlich egal)  ausgeben ...


----------



## SlaterB (8. Apr 2011)

hier ist ein Beispiel für ein BufferedImage, bei denen die Pixel einzeln gesetzt sind, 0 für scharz, 0xFFFFFF für weiß,
wobei ich kein Experte bin, gibt bestimmt tausend andere Wege
Galileo Computing :: Java ist auch eine Insel – 20.6 Bilder

wenn du irgendwo paintComponent() überschreibst, kannst du in einem definierten Raster auch selber schwarze oder weiße einzelne Punkte malen,
das bietet sich evtl. besonders für lange Reihen anstelle von 20 Images nebeneinander an,
andererseits kann es auch sinnvoll sein, Bilder für immer wiederkehrende gleiche Buchstaben wiederzuverwenden


was "1F" für eine Pixelanordnung ist musst du selber wissen, in ein Array umwandeln oder per Schleife interpretieren



```
public class TestGUI
    extends JFrame
{
    public TestGUI()
    {
        BufferedImage img = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB);
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                if (i < j)
                {
                    img.setRGB(i, j, 0xFFFFFF);
                }
            }
        }
        Image scaled = img.getScaledInstance(100, 100, 0);

        setLayout(new FlowLayout());
        add(new JLabel(new ImageIcon(img)));
        add(new JLabel(new ImageIcon(scaled)));

        setSize(450, 350);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

    }

    public static void main(String[] args)
    {
        new TestGUI();
    }
}
```


----------



## Jeykas (11. Apr 2011)

Danke, ich habe deins etwas erweitert um meinen Inversen Buchstaben zu bekommen, aber jetzt funktioniert es wunderbar.

Hier der Code dazu:

```
BufferedImage img = new BufferedImage(8, 8, BufferedImage.TYPE_BYTE_BINARY);
		 String trenn =",";
		 String text1 = "1F,13,15,13,15,13,1F,00";
		 String[] result2=text1.split(trenn);
 
		 String fina=null;
		for(int j =0; j<8; j++){
			String str = result2[j];
			 String str2 = str.substring(0,1);
			 String str3 = str.substring(1,2);
			 int ak = Integer.parseInt(str2);
			 int ak2 = Integer.parseInt(str3,16);
			 
			 String hal = Integer.toBinaryString(ak);
				String hal2 = Integer.toBinaryString(ak2);
				
				hal = StringUtils.leftPad(hal,4,'0');
				hal2 = StringUtils.leftPad(hal2,4, '0');
				fina = hal+hal2;
			
		for(int i=3; i<8; i++){
			if((fina.charAt(i)) == '1'){
				img.setRGB(i, j, 0xFFFFFF);
			}
			
			
		}
		}
		 System.out.println(fina);
		 System.out.println(fina.charAt(6));
		 
	
		
	          
	        Image scaled = img.getScaledInstance(100, 100, 0);
```


----------



## Jeykas (11. Apr 2011)

Wie kann ich eigentlich dieses Img das ich jetzt habe in ein Array setzen,
in diesem Array müssen aber auch das Alphabet sein, auch als image, aus der Hexdarstellung erstellt...


```
Image[] arr = new Image[50];
			arr[1] = img;
```

meine Fragen sind:
1. Wie erstelle ich Images aus den Hex darstellungen von den Buchstaben ?
2. Wie tu ich die alle in ein Array, bzw welchen Datentyp hat dieses Array ?

Vielleicht könnt ihr mir paar Seiten nennen wo solche Beispiele oder erklärungen sind..
Danke schonmal.


----------



## SlaterB (11. Apr 2011)

groß wird das Publikum hier nicht mehr sein, wenn du sauber formuliert neue Fragen hast, vielleicht in einem neuen Thema,
ich verstehe allerdings schon kaum was du nun exakt möchtest, besonders nicht wie es da Seiten mit Erklärungen geben soll

> 1. Wie erstelle ich Images aus den Hex darstellungen von den Buchstaben ?

Code dafür hast du doch schon gepostet? wenn mehrfach benötigt dann erstelle dir gegebenenfalls eine
Untermethode createImageForHex(hex);

> 2. Wie tu ich die alle in ein Array, bzw welchen Datentyp hat dieses Array ?

dein neuester Code dafür ist schon ziemlich passend, so gehts,
wenn du die Untermethode hast und die 'Hexe' (Mehrzahl von Hex, nicht eine Hexe) einzeln vorliegen, dann schlimmstenfalls Zeile für Zeile
arr[0] = createImageForHex(hexA);
arr[1] = createImageForHex(hexB);
arr[2] = createImageForHex(hexC);

wenn die Hexe auch schon in Arrays vorliegen, dann mit Schleifen evtl. alles kürzer zu programmieren


----------



## Jeykas (11. Apr 2011)

> > 1. Wie erstelle ich Images aus den Hex darstellungen von den Buchstaben ?
> 
> Code dafür hast du doch schon gepostet? wenn mehrfach benötigt dann erstelle dir gegebenenfalls eine
> Untermethode createImageForHex(hex);



damit meine ich, zb wird mir der String s = "48,49"; übergeben,
das sind die Hexwerte für H und I,
das als HI ausgeben kann ich ja, aber ich möchte das in einem Array für den wert 48 der Buchstabe H hinterlegt ist und ich 
ihn dann nur noch mit dem vergleich des Arrays raus holen und ausgeben muss.
Und die Buchstaben dann nicht als String auf einem Label, sondern
H als image + I als Image+... 

Ich hoffe das war verständlicher...


----------



## SlaterB (11. Apr 2011)

machen machen machen, wo genau besteht ein Problem?
du kannst ein Image aus einem Hex machen, du wirst doch wohl wissen, welcher Hex zu welchem Buchstaben gehört,
also irgendwann mal das Img zu Hex48 unter Index 48 speichern?

wenn du später einen String hast, dann splittest du den auf, aus der Anzahl der Elemente erstellst du dir ein passend großes Img-Array,
zu jedem Element holst du dir aus dem zu Anfang erstellten Archiv-Array das passende Img usw.,
Schritt für Schritt, das muss dir nicht alles im Kopf klar sein, manchmal hilft auch nach und nach alles zu programmieren,
dabei darf man sich auch korrigieren, vielleicht irgendwann von Array auf Map wechseln fürs Archiv


----------



## muckelzwerg (11. Apr 2011)

Für bessere Performance solltest Du setRGB() durch die von Dir schon angedachten Rasteroperationen oder System.Arraycopy() ersetzen.


----------



## Jeykas (11. Apr 2011)

Nichts will funktionieren !

Ich will doch nur von der Hex-Zahl den Buchstaben ermitteln( was ich ja schon hab, no problem) und diese dann als bitmap in ein array setzen, und das für mehrere Buchstaben... ????


----------



## SlaterB (11. Apr 2011)

was ist der Sinn dieses Postings?
1. allgemeine Status-Bekundung -> hier ist nicht Twitter
2. Hoffnung auf fertigen Quellcode von anderen -> nahezu unmöglich, da niemand weiß was bei dir konkret nötig ist, 
mal abgesehen davon dass das kaum jemand macht
3. normale Hilfe -> wie soll jemand auf 'bei mir geht nichts' antworten?, wahrscheinlich wieder konkrete Fragen stellen, alles aus der Nase ziehen,
so gehts nun auch nicht, ich habe mit diesem Posting jetzt schon zuviel geschrieben, da bleibt als einziger sonstiger Beitrag:
verstehe ich nicht


----------



## Jeykas (11. Apr 2011)

Irgendwie denke ich das du ohnehin nicht viel verstehst, und zudem Hier nur als Moderator tätig bist um die Poster zu kritisieren!
Was verstehst du an dem Text, " Den HEX-Wert in einen Buchstaben umwandeln und dieses dann als Bitmap ausgeben" nicht ???

Ich will keinen fertigen Code, oder meinen Status bekunden, 
meiner Meinung nach sind ja Foren da um Hilfestellung und Ideen zu bekommen, wenn du keine hast dann lasse es und Antworte einfach nicht!


----------



## SlaterB (11. Apr 2011)

lustige Kritik da ich bisher quasi als einziger hier geholfen habe, aber gerne spare ich mir das im weiteren


----------



## muckelzwerg (11. Apr 2011)

Jeykas, das was Du da anreißt fällt in den Bereich Font-Rendering. Dafür gibt es in Java für gewöhnlich die drawString() Methode, so wie weitere Methoden zum Einstellen der Schriftarten.
Wenn Du diese Standardmethoden nicht verwenden willst, dann solltest Du sie als Basis nehmen, um zu erklären was Du stattdessen vorhast/brauchst.
Der "Hex-Wert" ist nur eine Zahl, ganz genau wie das im ASCII oder UTF-8 Code zugeordnete Zeichen. Eine grafische Darstellung gibt es dort nicht. Die liegt wie angesprochen in den Schriftarten. Und genau an der Stelle liegt sowohl Dein Problem, als auch Deine schlechte Erklärung. 
"Wie erstelle ich Images aus den Hex-Werten?" 
Die Antwort ist einfach. Gar nicht. Entweder Du hast die Bilder bereits (Schriftart) oder Du musst sie selbst Pixel für Pixel erfinden.


----------

