Farbverlauf

Status
Nicht offen für weitere Antworten.

phyrexianer

Bekanntes Mitglied
Code:
GC gc = new GC(image);
    Color c = display.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
    int r = (c.getRed()-100);
    int g = (c.getGreen()-200);
    int b = (c.getBlue()-100);
    for (int i = 0; i < 100; i++) {
    	gc.setForeground(new Color(display,100+r*i/100,200+g*i/100,100+b*i/100));
    	//System.out.println(c.getRGB().toString());
    	//gc.setForeground(c);
    	gc.setLineWidth(1);
    	gc.drawLine(0, 0+i, image.getBounds().width, 0+i);
	}
    gc.dispose();

Hallo leude..... Also ich versuche hier einen Farbveraluf zu realiesieren aber irgendwie bekomme ich das nicht hin. Als ich habe schon einen Farbveraluf starte auch bei der gewünschten Farbe und ende auch dort. Jedoch bekomme ich Artefakte bzw. Farbsprünge rein sehe aber meinen Fehler nicht oder übersehe ich etwas in der Farbtheorie.

also ich will einfach von der Farbe RGB {100, 200, 100} auf die farbe RGB {236, 233, 216}
 
S

SlaterB

Gast
kommt bisschen drauf an, was r, g, b sind

z.B. r = 20
20*0/100 = 0/100 = 0
20*1/100 = 20/100 = 0
20*2/100 = 40/100 = 0
20*3/100 = 60/100 = 0
20*4/100 = 80/100 = 0
20*5/100 = 100/100 = 1
20*6/100 = 120/100 = 1

->
bevor du megakomplexe Algorithmen mit hunderten Rechnungen baust,
schaue dir doch mal an, was bei 5/7 in Java rauskommt :autsch: :wink:

edit: ach ist vielleicht auch gar nicht so falsch, hatte das jetzt etwas drastischer in den Auswirkungen gesehen,
aber bei einem kleinen Gesamtbereich sind es ja eh nur 20 Schritte auf 100 i ;)

na auf jeden Fall solltest du dir mal ausgeben lassen, was denn da an Farb-Werten für jedes i ausgerechnet wird,
besonders an den Sprungstellen
 
S

SlaterB

Gast
Code:
public class TestGUI
    extends JFrame
{

    public TestGUI()
    {
        add(new TestPanel());

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800, 400);
        setVisible(true);
    }


    class TestPanel
        extends JPanel
    {
        public void paint(Graphics g)
        {
            super.paint(g);
            Color c = new Color(236, 233, 216);
            int r = (c.getRed() - 100);
            int gr = (c.getGreen() - 200);
            int b = (c.getBlue() - 100);
            for (int i = 0; i < 100; i++)
            {
                g.setColor(new Color(100 + r * i / 100, 200 + gr * i / 100, 100 + b * i / 100));
                g.drawLine(i + 50, 50, i + 50, 200);
            }

        }
    }

    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }
}
sieht bei mir gut aus, wenn ich Windows-Anzeige auf 32bit umstelle,
bei 16 bit gibts nur 8 verschiedene Farben
 

phyrexianer

Bekanntes Mitglied
@Slater

das es in wirklichkeit nur 20 Farbsprünge sind ist mir bewusst... und was bei 5/7 rauskommt weiß ich auch ;-) ich wollte einfach nur in einer SWT.Group die obersten 30 Pixel oder so einfärben welchen von oben nach unten einen Fabveraluf hat. Um meine Oberfläche graphsich etwas aufzupeppen. und irgendwie ist der Farbveraluf halt nicht sooooo schön geworden.

@Wildcard

kannst du mir villeicht einen kleine codeschnipsel geben wie ich dieses Pattern anwenden kann ???

hab volgendes versucht!

Code:
GC gc = new GC(label);
Pattern p = new Pattern(display,0.0f,0.0f,label.getBounds().width,label.getBounds().height,new Color(display,start),new Color(display,end));
    gc.setBackgroundPattern(p);

aber irgendwie ohne erfolg...... bzw. finde ich irgendwie nichts was mir das Pattern erklärt. bzw. wie man damit umgeht....
 
S

SlaterB

Gast
wie gesagt funktioniert der manuelle Verlauf auch,

es kann an den Einstellungen der Anzeige liegen,
bei Windows: rechte Maustaste auf Desktop - Einstellungen - Farbqualität
 

phyrexianer

Bekanntes Mitglied
@wildcard also wenn ich es folgendermaßen versuche bekomme ich es auch nicht in auch wenn ich jetzt gc.fillRect oder gc.drawRect benutze. !?!
dass das davor ein wenig doof war gebe ich zu.... manchmal sieht man den Wald vor lauter bäumen nicht und heute wohl auch kaum ;-)

Code:
group = new Group(this, SWT.NONE);
		group.setLayout(new GridLayout());
		group.setLayoutData(gridData);
		float x1  = group.getBounds().x;
		float x2 = x1+group.getBounds().width;
		float y1  = group.getBounds().y;
		float y2 = y1+group.getBounds().height;
		RGB start = new RGB(100,200,100);
	    RGB end = new RGB(255,255,255);
		Display d = group.getDisplay();
		GC gc = new GC(group);
		Pattern p = new Pattern(d,x1,y1,x2,y2,new Color(d,start),new Color(d,end));
		gc.setBackgroundPattern(p);
		gc.drawRectangle(group.getBounds().x, group.getBounds().y, group.getBounds().width, group.getBounds().height);
		gc.dispose();

@SlaterB
ja das sollte eigentlich auch funktionieren werde ich auch mal gleich wieder versuchen... aber wenn das alles sozusagen schon implementiert ist und ich fertige Methoden verwenden kann würde ich es auch gerne tun.
 

Wildcard

Top Contributor
Wenn du zeichnen willst, brauchst du einen paintListener. Warum benutzt du SWT wenn du nicht weißt wie es funktioniert? ???:L
 

phyrexianer

Bekanntes Mitglied
@wildcard

weil ich es lernen will..... bisher konnte ich mir auch alles ganz gut zusammenreimen bzw. hinbekommen !!! Und weil es mir einfach zusagt.
 

Wildcard

Top Contributor
Wenn einem SWT zusagt, braucht man schon einen sehr speziellen Geschmack, aber bitte...
Meiner Meinung nach ist SWT ein Rückschritt um 5 Jahre gegenüber Swing.
Bei Swing überschreibst du zum Zeichnen paintComponent, bei SWT hängst du einen paintListener an das Control.
Dort bekommst du dann auch einen GC und musst ihn nicht selbst erstellen.
 

phyrexianer

Bekanntes Mitglied
@wildcard ja denn habe ich dann wohl.... ;-) ich will es einfach nur dass es "nativ" aussieht deswegen verwende ich SWT wenn ein so großes Framework wie ECLIPSE drauf aufbaut.... kann es wohl nicht sooooooo schlecht sein. Ich denke je nach Anwendungsbereich wird es immer etwas geben was besser oder schlechter ist. Ich bin auch nicht hier um zu diskutieren was besser und was schlechter ist, sonder einfach um HILFE zu finden. Könne aber gerne wieder einen Thread starten bei dem es um den Streit der RELIGIONEN geht ;-) welche Religion wird wohl die richtige sein ...... aber in diesem Fall verweise ich einfach auf "Nathan den Weisen"

um aber beim Thema zu bleiben hier ist der Code der funktioniert..... ist zwar nicht perfekt weil das rechteck etwas genau geziechnet werden muss damit es schön in das "Group" reinpasst aber das ist ja dann das kleinere übel... Die Idee funktioniert !!!

Code:
group.addPaintListener(new PaintListener(){
			public void paintControl(PaintEvent e) {
				float x1  = group.getBounds().x;
				float x2 = x1+group.getBounds().width;
				float y1  = group.getBounds().y;
				float y2 = y1+group.getBounds().height;
				RGB start = new RGB(100,200,100);
			       RGB end = new RGB(236,233,216);
				Display d = group.getDisplay();
				System.out.println(d.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
				Pattern p = new Pattern(d,group.getBounds().width/2,y1,group.getBounds().width/2,y2,new Color(d,start),new Color(d,end));
				System.out.println("ich zeichne");
				e.gc.setBackgroundPattern(p);
				e.gc.fillRectangle(group.getBounds().x, group.getBounds().y, group.getBounds().width, group.getBounds().height);
				
			}
			
		});


P.S.: @Wildcard auch wenn du am Ende etwas vom Weg abbekommen bist danke ich dir vielmals für deine Hilfe... bin ja doch noch auf den richtigen Pfad gekommen ;-)
 

Wildcard

Top Contributor
phyrexianer hat gesagt.:
P.S.: @Wildcard auch wenn du am Ende etwas vom Weg abbekommen bist danke ich dir vielmals für deine Hilfe... bin ja doch noch auf den richtigen Pfad gekommen ;-)
Vom Weg abgekommen? Ich hab dir doch genau gesagt was zu tun ist, oder nicht? :bae:

OT:
@wildcard ja denn habe ich dann wohl.... ich will es einfach nur dass es "nativ" aussieht deswegen verwende ich SWT wenn ein so großes Framework wie ECLIPSE drauf aufbaut.... kann es wohl nicht sooooooo schlecht sein.
Überleg die mal wie alt Eclipse ist und wie sich Swing in der Zwischenzeit verändert hat. SWT hat damals Sinn gemacht und Eclipse ist viel zu komplex um das nachträglich zu ändern.
Ich entwickle Hauptsächlich für Eclipse (daher habe ich auch genug mit SWT zu tun). Warum jemand der weder RCP noch Eclipse Plugins schreiben will, freiwillig ein Toolkit nimmt, das weit weniger flexibel ist, das zur Laufzeit langsamer ist, das umständlicher zu verwenden ist, das sich langsamer entwickelt und das sich nicht auf allen Plattformen gleich verhält, ist mir rätselhaft.
 

phyrexianer

Bekanntes Mitglied
.....Warum jemand der weder RCP noch Eclipse Plugins schreiben will, freiwillig ein Toolkit nimmt, das weit weniger flexibel ist, das zur Laufzeit langsamer ist, das umständlicher zu verwenden ist, das sich langsamer entwickelt und das sich nicht auf allen Plattformen gleich verhält, ist mir rätselhaft.

genau das wird der nächste Schritt sein :)


ich werde mich dann aber Privat mit SWING auseindersetzten...... hatte das ganz am anfang auch gemacht aber irgendwie nicht damit zurecht gekommen warum auch immer.... vielleicht war damals das Verständniss für Java nicht wirklich da.
 

phyrexianer

Bekanntes Mitglied
da ich aber hier gerade einen Spezialisten habe..... ist es ein großer Aufwand eine Anwendung die als JAR läuft als RCP zu portieren bzw. ein Plugin drauß zu machen ?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben