2011-01-14 4 views
1

Voici mon code:Comparaison d'une image à une image bitmap?

borderTop.BackgroundImage == Properties.Resources.buttonTopSelected 

Je dois voir si la propriété .BackgroundImage est le même que l'image que j'ajouté à la ressource. Comment puis-je comparer ces deux images?

Dans le code, l'un est une image et l'autre est un bitmap.

Des suggestions?

+0

Vous devez publier plus de code, je ne comprends pas comment votre question se rapporte à votre extrait de code. – Lazarus

+0

@Lazarus: Je vais éditer ma question pour la rendre plus succincte. –

Répondre

0

La comparaison ne fonctionnera pas car ils ne sont pas le même objet, c'est comparer les références pas les propriétés de l'objet. Alors que vous pouvez comparer les images pixel par pixel qui sont un peu exagérées, je suggère probablement d'utiliser un autre moyen pour stocker l'état du bouton dans une propriété de bouton existante ou en étendant le bouton dans votre propre classe qui contient des informations supplémentaires héritage).

----- ----- EDIT

Vous pouvez ajouter à l'état du bouton par héritage, à savoir:

public class MyButtonWithState : Button 
{ 
    public int ButtonState { get; set; } 
} 

Vous pouvez instancier vos boutons en utilisant MyButtonWithState plutôt que le bouton .

public Form1() 
{ 
    InitializeComponent(); 

    MyButtonWithState NewButton = new MyButtonWithState(); 
    NewButton.Text = "My Test Button"; 
    NewButton.ButtonState = 3; 
    this.Controls.Add(NewButton); 
} 

Si vous voulez que ce disponible au moment de la conception il y a un peu plus à faire, mais cela devrait vous donner l'idée de base.

+0

Je vous ai donné un upvote parce que j'ai appris qu'il s'agissait de comparer des références et non l'objet lui-même. Cependant, je ne sais plus comment comparer les images. Comment pourrais-je définir l'état du bouton sans comparer les images? Je devrais obtenir l'état initial de quelque part. –

+0

En ce qui concerne edit: Oui, je pensais à quelque chose comme ça. C'est un peu exagéré pour ce que j'essaie d'accomplir cependant. –

+1

En comparaison à une comparaison pixel par pixel des images (votre seule autre option je crois), je pense que c'est beaucoup, beaucoup plus léger et plus rapide. Vous pouvez faire de ButtonState une chaîne et stocker le nom de la ressource que vous avez chargée comme alternative, mais je n'y vois pas beaucoup d'avantages. À la fin de la journée, vous devez être à l'aise avec le code pas je :) – Lazarus

1

Vous devez stocker les références afin de pouvoir les comparer ultérieurement. Quelque chose comme:

Bitmap top = Properties.Resources.buttonTopSelected; 
    Bitmap bottom = Properties.Resources.buttonBottomSelected; 
    ... 
     borderTop.BackgroundImage = top; 
    ... 
     if (borderTop.BackgroundImage == top) { 
      // etc.. 
     } 

N'oubliez pas de les éliminer dans la méthode Dispose() du formulaire.

+0

Pensez-vous que c'est une bonne idée de stocker l'état dans BackgroundImage? Peut-être ajouter une autre propriété viole le principe DRY puisque l'état est effectivement indiqué par BackgroundImage. Hmm .... m'a fait penser maintenant, sent toujours mauvais mais ça peut être moi :) – Lazarus