2013-05-09 4 views
0

Je fais un travail de rétro-ingénierie sur un programme. L'une des choses que je suis en train de sortir de la vieille données est une couleur qui a été choisi parmi la couleur ci-dessous paletteEst-ce une palette de couleurs standard?

enter image description here

La façon dont l'ancien logiciel est refrencing la couleur est par l'index dans la palette (donc 0 est blanc, 1 est jaune, 2 est orange et ainsi de suite). La palette ci-dessus est-elle une disposition standard d'un certain type?

Quel est mon meilleur espoir est de trouver une classe intégrée à .NET où je pourrais passer le même numéro d'index et récupérer la couleur, mais je n'ai pas beaucoup d'espoir de trouver quelque chose d'aussi bien.

En plus de l'utilisation de la peinture et d'une pipette pour mapper manuellement toute la table, est-il possible de me faciliter la tâche?

+1

Vous pouvez écrire du code qui lit ce bitmap et examine les pixels pour construire une palette. – SLaks

+0

Très bonne idée, '5 + (10 * (i% 16))', '5 + (10 * (i/16))' me donnerait le centre de chaque carré (après l'avoir coupé en 160x160 px), Postez cela comme une réponse et je le mettrais en vote (et je l'accepterais si rien d'autre ne se présentait) –

+0

Ça ne l'est pas. La palette Windows courante a 10 couleurs fixes au début et 10 à la fin. Il y a bien sûr un nombre presque infini de façons de regrouper 256 couleurs. Utilisez la propriété Image.Palette. –

Répondre

1

Vous pouvez écrire du code qui lit ce bitmap et examine les pixels pour construire la palette de couleurs dans le bitmap que vous avez extrait.

1

Il s'agit d'une palette 16 x 16 = 256. L'ancien logiciel a probablement stocké cette palette dans un gif-file. Vous pouvez créer un tableau de valeurs hexadécimales à partir de cette palette (codée en dur ou à l'exécution).

La première ligne est une ligne "utile" -colors.

Les rangées de deux à huit décalages donnent des valeurs de teinte de 338 ° à 335 °.

Les rangées neuf à quinze montrent (7) teintes et (8) nuances (modèle de couleur HSB) de teinte 0 °, 30 °, 60 °, 116 °, 180 °, 230 ° et 300 °.

La dernière rangée est évidemment une échelle de gris.

Je ne pense pas que ce soit une disposition standard. Si vous voulez une valeur exacte, vous devez utiliser la pipette ...

1

J'ai fini par utiliser SLaks suggestion et je viens de boucler sur l'image et lire les valeurs de pixels à partir du centre de chaque carré. Voici une preuve rapide de test de concept que j'ai couru qui a chargé toutes les couleurs dans un TableLayoutPanel et cela a fonctionné parfaitement.

private void button1_Click(object sender, EventArgs e) 
{ 
    string pngPath = @"E:\Color Pallet.png"; 
    tableLayoutPanel1.Controls.Clear(); 

    using (var bitmap = new Bitmap(pngPath)) 
    { 
     for (int i = 0; i < 256; i++) 
     { 
      var color = bitmap.GetPixel(5 + (10*(i%16)), 5 + (10*(i/16))); 
      tableLayoutPanel1.Controls.Add(new Panel {Dock = DockStyle.Fill, BackColor = color}, i % 16, i/16); 
     } 
    } 

@SLaks, si vous postez votre réponse que je vais supprimer la mienne et accepter le vôtre.

+1

Ne supprimez pas votre réponse; il a du code utile. – SLaks

Questions connexes