[c#] Hoe in GDI+ optellen en aftrekken van kleuren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Misschien wazige topictitel, maar ik kon niet op wat beters komen.

Het probleem is als volgt:

Ik ben bezig een heatmap te maken waarop ik verschil moet laten zien.
Ik heb een aantal + punten (locaties op de kaart die positief zijn)
en ik heb een aantal - punten (locaties op diezelfde kaart die negatief zijn)

De kaart begint op grijs, en zwart is positief, en wit negatief. Bij het tekenen van een punt teken ik niet alleen dat punt, maar teken ik er een rondje omheen.
Dit doe ik met de volgende c# code:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
List<Point> CircumferencePointsList = new List<Point>();

Point CircumferencePoint;
Point[] CircumferencePointsArray;

for (double i = 0; i <= 360; i += 15)
{
    CircumferencePoint = new Point();

    CircumferencePoint.X = Convert.ToInt32(HeatPoint.X + Radius * Math.Cos(ConvertDegreesToRadians(i)));
    CircumferencePoint.Y = Convert.ToInt32(HeatPoint.Y + Radius * Math.Sin(ConvertDegreesToRadians(i)));

    CircumferencePointsList.Add(CircumferencePoint);
}

CircumferencePointsArray = CircumferencePointsList.ToArray();

Create new PathGradientBrush to create a radial gradient using the circumference points
PathGradientBrush GradientShaper = new PathGradientBrush(CircumferencePointsArray);

ColorBlend GradientSpecifications = new ColorBlend(3);

GradientSpecifications.Positions = new float[3] { 0, 0.5f, 1 };
GradientSpecifications.Colors = new Color[3]
{
    Color.FromArgb(0, color),
    Color.FromArgb(opacity / 2, color),
    Color.FromArgb(opacity, color)
};

GradientShaper.InterpolationColors = GradientSpecifications;
g.FillPolygon(GradientShaper, CircumferencePointsArray);

(dus ik teken een 'bobbel')

Waneer de punten niet overlappen gaat dit prima, echter is dit wel het geval.

Nu wil ik dat wanneer ik een positief punt op locatie 100, 100 zet, en daar overheen een negatief punt op diezelfde plek, dat het resultaat '0' is, en dus helemaal grijs.

Echter kan ik dit wel beredeneren in 'normaal' c#, maar omdat ik het in GDI+ doe heb ik geen flauw idee hoe ik dit moet aanvliegen.

Zeker omdat ik soms 40 punten op ongeveer 1 plek doe die positief zijn, en daarna een stuk of wat die negatief zijn.
zijn er multiply functies oid in GDI?

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 20:12

Armageddon_2k

Trotse eigenaar: Yamaha R6

Nou, aangezien je met overlappende kleuren werkt heb ik een paar vragen.
1. Wat is je opacity
2. Welke kleuren gebruik je

Het is natuulijk prachtig dat voor jou positief + negatief een 0 oplevert.
Maar als je aRGB kleuren niet recht tegen over elkaar staan, krijg je nooit dat resultaat.
Blauw + Geel, zal altijd groen opleveren, en niet grijs.

3. Waarom gebruik je ook nog eens een gradient? om het moeilijker te maken? :P

[ Voor 10% gewijzigd door Armageddon_2k op 06-01-2011 12:07 ]


Acties:
  • 0 Henk 'm!

  • EddoH
  • Registratie: Maart 2009
  • Niet online

EddoH

Backpfeifengesicht

Waarom gebruik je neit iets van een map waarin de values staan, en gebruik je bij het renderen van je valuemap een color table. Kun je achteraf nog kleuren voor verschillende values aanpassen ook.

Dus eerst values berekenen, daarna pas kleur toepassen.