2011-01-14 5 views
1

Вот мой код:Сравнение изображения с растровым изображением?

borderTop.BackgroundImage == Properties.Resources.buttonTopSelected 

мне нужно, чтобы увидеть, если свойство .BackgroundImage является такой же, как картина, которую я добавил к ресурсу. Как я могу сравнить эти два изображения?

В коде, один является изображением, а другой - растровым.

Любые предложения?

+0

Вам нужно разместить больше кода, я не понимаю, как ваш вопрос относится к вашему фрагменту кода. – Lazarus

+0

@Lazarus: Я отредактирую свой вопрос, чтобы сделать его более кратким. –

ответ

0

Сравнение не будет работать, поскольку они не являются одним и тем же объектом, это сравнение ссылок не свойств объекта. Хотя вы могли бы сравнить пиксели пикселей по пикселям, которые несколько завышены, я бы предположил использовать другой способ хранения состояния кнопки либо в существующем свойстве кнопки, либо путем расширения кнопки в свой собственный класс, который имеет дополнительную информацию (используя композицию или наследование).

----- EDIT -----

Вы можете добавить состояние к Баттона по наследству, то есть:

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

Вы можете создать экземпляр кнопки, используя MyButtonWithState, а не просто кнопки ,

public Form1() 
{ 
    InitializeComponent(); 

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

Если вы хотите, чтобы это доступно во время разработки есть немного больше, чтобы сделать, но это должно дать вам основную идею.

+0

Я дал вам верх, потому что я узнал, что это сравнение ссылок, а не самого объекта. Однако сейчас я затрудняюсь с тем, как сравнивать изображения. Как я могу установить состояние кнопки без сравнения изображений? Мне нужно было получить начальное состояние откуда-то. –

+0

Относительно редактирования: Да, я думал о чем-то подобном. Тем не менее, это немного переполняет то, что я пытаюсь выполнить. –

+1

По сравнению с сопоставлением изображений по пикселям (ваш единственный вариант, на который я верю), я думаю, что это намного, намного легче и быстрее. Вы можете сделать ButtonState строкой и сохранить имя загруженного вами ресурса в качестве альтернативы, но я не вижу там много преимуществ. В конце дня вам нужно быть в курсе кода, а не я :) – Lazarus

1

Вам необходимо сохранить ссылки, чтобы их сравнить позже. Что-то вроде:

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

Не забудьте утилизировать их в методе Dispose() формы.

+0

Как вы думаете, это хорошая идея сохранить состояние в BackgroundImage? Возможно, добавление другого свойства нарушает принцип DRY, поскольку состояние эффективно указывается BackgroundImage. Хмм ... мне теперь нужно думать, все еще плохо пахнет, но это может быть только я :) – Lazarus

Смежные вопросы