2011-01-14 5 views
1

내 코드는 다음과 같습니다.이미지를 비트 맵과 비교 하시겠습니까?

borderTop.BackgroundImage == Properties.Resources.buttonTopSelected 

.BackgroundImage 속성이 리소스에 추가 한 그림과 같은지 확인해야합니다. 이 두 이미지를 어떻게 비교할 수 있습니까?

코드에서 하나는 이미지이고 하나는 비트 맵입니다.

어떤 제안이 있습니까?

+0

코드를 더 게시해야하는데 귀하의 질문과 귀하의 코드 스 니펫이 어떤 관련이 있는지 이해할 수 없습니다. – Lazarus

+0

@Lazarus : 질문을 더 간결하게 편집하겠습니다. –

답변

0

동일한 개체가 아니기 때문에 비교가 작동하지 않습니다. 이는 개체 속성이 아닌 참조를 비교합니다. 이미지를 픽셀 단위로 비교할 수는 있지만 다소 과잉 인 경우 버튼 속성을 기존 버튼 속성에 저장하거나 단추를 자신의 클래스로 확장하여 추가 정보가있는 다른 방법을 사용하는 것이 좋습니다 (컴포지션 또는 계승).

----- 편집 -----

당신은 즉, 상속을 통해 버튼에 상태를 추가 할 수

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

참고서를 비교하는 것이고 객체 자체는 비교하지 않는다는 것을 알았 기 때문에 나는 upvote를주었습니다. 그러나 나는 지금 이미지를 비교하는 방법에 대한 손실에있어. 어떻게 이미지를 비교하지 않고 버튼의 상태를 설정할 수 있습니까? 나는 어딘가에서 초기 상태를 얻어야 할 것이다. –

+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에 상태를 저장하는 것이 좋습니다. 아마도 다른 속성을 추가하면 상태가 BackgroundImage에 의해 효과적으로 표시되므로 DRY 원칙을 위반하게됩니다. 흠 .... .... 지금 생각하고있어, 아직도 냄새가 나쁘지 만 그게 나일지도 몰라. :) – Lazarus

관련 문제