Avatar billede nielsbrinch Nybegynder
10. marts 2002 - 23:26 Der er 17 kommentarer og
1 løsning

HEX-kode til Color-objekt

Jeg stillede tidligere et spørgsmål om at ændre et Color-objekt til HEX-kode (f.eks. #0099CC). Ingen problemer der, men den anden vej er det straks sværere ... eller er det?

Er der bare noget jeg overser. Skriver jeg "HEX" i søgefunktionen på java.sun.com kommer der kun tre sider frem, og intet brugbart. Er der nogen der kender en god måde at omdanne en HEX-kode til et Color-objekt (eller f.eks. Rød-Grøn-Blå værdier)
Avatar billede disky Nybegynder
10. marts 2002 - 23:37 #1
brug
Dit color object hedder 'color'
int red=color.getRed()
int green=color.getGreen()
int blue=color.getBlue()

String hexCode;

hexCode="#"+Integer.toHexString(red)+Integer.toHexString(green)+Integer.toHexString(blue);

Så skulle den være hjemme :)
Avatar billede erikjacobsen Ekspert
10. marts 2002 - 23:44 #2
knap nok disky, du mangler foranstillede nuller, hvis tallene er unde
16
Avatar billede erikjacobsen Ekspert
10. marts 2002 - 23:47 #3
Men man kan jo lave en lille metode:

static public String hex2(int t) {
  if (t < 16) {
    return "0"+Integer.toHexString(t);
  } else {
    return Integer.toHexString(t);
  }
}

og så

hexCode="#"+hex2(red)+hex2(green)+hex2(blue);
Avatar billede disky Nybegynder
10. marts 2002 - 23:47 #4
Korrekt, vi prøve med V2.

int red=color.getRed()
int green=color.getGreen()
int blue=color.getBlue()

String hexCode="#"+getHexCode(red)+getHexCode(green)+getHexCode(blue);


og metoden
public String getHexCode(int farve)
{
  String result=""
  if(farve<16) result="0";
  result+=Integer.toHexString(farve);
  return result;
}
Avatar billede disky Nybegynder
10. marts 2002 - 23:48 #5
erik:
Det er en MEGET grim ting at have flere returns fra en metode, de strider imod alle pæne programmeringsprincipper.
Avatar billede nielsbrinch Nybegynder
10. marts 2002 - 23:51 #6
Tak for det disky ... men spørgsmålet handlede om at lave en HEX-kode (f.eks. 0099CC) om til et Color-objekt ikke omvendt. Jeg undskylder mit lidt uklare spørgsmål, titlen på spørgsmålet hedder noget så kryptisk som "HEX-kode til Color-objekt" og det kan jo betyde mange ting.
Avatar billede nielsbrinch Nybegynder
10. marts 2002 - 23:53 #7
Det I snakker om lige nu løste jeg med:

public String convert(Color c)
  {
    String temp = "";
    temp += toHex(c.getRed());
    temp += toHex(c.getGreen());
    temp += toHex(c.getBlue());

    return temp;
  }

  public String toHex(int n)
  {
    StringBuffer sb = new StringBuffer(Integer.toHexString(n));
    if (sb.length() == 1)
    {
      sb.insert(0, "0");
    }
    return sb.toString();
  }

med hjælp fra soreno
Avatar billede erikjacobsen Ekspert
10. marts 2002 - 23:55 #8
Hver sin lyst disky, men skal der kun være en return foretrækker
jeg nu

static public String hex2(int t) {
  return (t<16?"0":"")+Integer.toHexString(t);
}

men det var åbenbart svaret på noget andet ,,,,:)
Avatar billede nielsbrinch Nybegynder
10. marts 2002 - 23:57 #9
Altså - mange tak for hjælpen ... men HEX => Color?
Avatar billede erikjacobsen Ekspert
11. marts 2002 - 00:00 #10
Noget i retning af

String s="091a7b";

    int r=Integer.parseInt(s.substring(0,2),16);
    int g=Integer.parseInt(s.substring(2,4),16);
    int b=Integer.parseInt(s.substring(4,6),16);

Color c = new Color(r,g,b);
Avatar billede nielsbrinch Nybegynder
11. marts 2002 - 00:01 #11
Hvorfor egentligt under 16? Jeg troede bare den huggede foran-nuller af og lavede f.eks. 09 om til 9 osv
Avatar billede disky Nybegynder
11. marts 2002 - 00:01 #12
Den terneary operator er nok noget af det grimmeste der nogen sinde er blevet smidt i et programmerings sprog, den gør overskueligheden endnu dårligere en SUN's måde at sætte {}'ere på.

Og gavner slet ikke noget.

Hvis du nogensinde har haft nassy schneiderman diagrammer ved du at man kun har en indgang og en udgang fra et program/metode osv.

Niels:

Fjern # bruge Integer.parseInt() på stringen, så har du en int værdi som du kan oprette en Color() ud fra.
Avatar billede erikjacobsen Ekspert
11. marts 2002 - 00:06 #13
Jah, så'n en constructer er der sør'me osse:

String s="091a7b";
Color c = new Color(Integer.parseInt(s,16));
Avatar billede nielsbrinch Nybegynder
11. marts 2002 - 00:10 #14
Så burde
minKnap.setBackground(new Color(Integer.parseInt(textFelt.getText())));
jo virke ...

Men det gør det ikke. Knappen bliver f.eks. ikke hvid af at man skriver 6 F'er i tekstfeltet og udfører funktionen (med en keyReleased)
Avatar billede nielsbrinch Nybegynder
11. marts 2002 - 00:12 #15
Perfekt, det var ",16" i parseInt() jeg manglede
Avatar billede erikjacobsen Ekspert
11. marts 2002 - 00:12 #16
Skriv lige rigtigt af Niels
Avatar billede nielsbrinch Nybegynder
11. marts 2002 - 00:13 #17
Erik, din kommentar var ikke dukket op på skærmen endnu da jeg skrev den kommentar. Tak for hjælpen, du.
Avatar billede disky Nybegynder
11. marts 2002 - 00:13 #18
ret til:
minKnap.setBackground(new Color(Integer.parseInt(textFelt.getText(),16)));

Pas dog på du for en NumberFormatException hvis man indtaster noget der ikke kan være et hex tal
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester