Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    85

    Come ottenere 2 colori contrastanti

    Io ho un applicazione dove scelgo il colore del testo! (esempio rosso chiaro) se il colore scelto è molto simile al colore del mio sfondo (esempio rosso scuro) lo sfondo dovrebbe cambiare colore.
    Mi interessa il procedimento, non il lingiaggio usato. L'esempio è riportato in java


    if( isColoriAbbastanzaContrastati( colore testo, colore sfondo ) ==
    false ) {
    salva colore
    }

    //Metodo
    public static boolean isColoriAbbastanzaContrastati( Color colore1, Color
    colore2 ) {

    int r1 = colore1.getRed();
    int g1 = colore1.getGreen();
    int b1 = colore1.getBlue();

    int r2 = colore2.getRed();
    int g2 = colore2.getGreen();
    int b2 = colore2.getBlue();

    int ris = (Math.max(r1, r2) - Math.min(r1, r2)) +
    (Math.max (g1, g2) - Math.min( g1, g2)) +
    (Math.max (b1, b2) - Math.min (b1, b2));
    return ris > 500;
    }

    Questo è quello che ho fin ora ma va come può. su alcuni colori si sbaglia.
    Qualche d'uno conosce un metodo un pò più serio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    85
    Ho dimenticato la parte più importante

    private Color calcolaColoreContrastatoOttimale(Color color) {

    // TODO da fare non funziona bene

    float af[] = Color.RGBtoHSB( color.getRed(), color.getGreen(),
    color.getBlue(), null );
    String args1[] = {
    "H=", "S=", "I="
    };

    DecimalFormat decimalformat = new DecimalFormat("0.000");
    for(int j = 0; j < 3; j++)
    System.out.println(args1[j] + decimalformat.format(af[j]));

    return new Color( Color.HSBtoRGB( af[0]+180, 255, (255 - af[2]) ) );

    }

  3. #3
    Anche se sembra banale a prima vista, in realtà quello che chiedi è piuttosto complesso. Il formato RGB è tagliato per il monitor, ma all'occhio umano la differenza tra (0, 0, 0) e (100, 0, 0) è inferiore (di parecchio) rispetto alla differenza tra (0, 0, 0) e (0, 100, 0). Più indicato è un approccio basato su HSV, un formato più allineato rispetto ciò che effettivamente vede un occhio umano comune.

    Comunque bando alla teoria: secondo me se vuoi la professionalità spulcia la libreria littlecms

    http://www.littlecms.com/

    particolarmente alla funzione cmsDeltaE(). In alternativa (se il tuo linguaggio di programmazione lo consente) usala.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.