2014-03-18 5 views
0

그래서. 10 개의 질문 중 8 개의 질문에서 직접적이고 즉각적으로 유용한 대답을 제시합니다. 또는 적어도 내 질문이 어떻게 든 잘못된 이유를 설명합니다.마우스 위치 (RFC)에서 Panel 픽셀의 색을 얻을 수있는 방법

그래서 나는이 간단한 것에 대한 내 좋아하는 것에 대한 답을 찾을 수 없다는 것이 이상하다는 것을 알았고, 나는 자주 묻는 질문을했다.

높은 값과 낮은 값을 검색 한 후 아래 해결책을 함께 패치했습니다. 괜찮아요.하지만 궁금합니다.

  • 결함이 있습니까? (예 : 처분해야합니까?)

  • 더 나은 해결책이 있습니까?

I 잠재적 유일한 1x1 크기의 비트 맵 크기를 사용 CopyFromScreen 가진 soultion보고 싶어하지만, 그래픽 .. 그래서 다른 용액 이해 될 필요 것이다.

또는 컨트롤의 픽셀에 직접 액세스하는 것.

참고 1 : 패널의 색상을 잡고 싶습니다. 그림 상자가 아니라 화면에서 .. 주 2 : 내 스포티 도구를 만들기 위해 프로젝트 속도가 중요하지 않습니다. 그러나 신속한 방법도 환영합니다. 나는 colorsPanel_MouseClick 이벤트에 다음과 같이 사용

public Color getColor(Control ctl, Point location) 
{ 
    Bitmap bmp = new Bitmap(ctl.Width, ctl.Height); 
    ctl.DrawToBitmap(bmp, new Rectangle(0, 0, ctl.Width, ctl.Height)); 
    Color col = bmp.GetPixel(location.X, location.Y); 
    bmp.Dispose(); 
    return col; 
} 

:

 myPen = new Pen(getColor(colorsPanel, e.Location), myStrokeWidth); 

답변

0

내가 버전으로 올라와있다 그 사용 내가 옆에 가서 볼 수있는 곳 누가

내 솔루션 ... 알고 CopyFromScreen 다음과 같이 :

public Color getScrColor(Control ctl, Point location) 
{ 
    Bitmap bmp = new Bitmap(1, 1); 
    Graphics g = Graphics.FromImage(bmp); 
    Point screenP = ctl.PointToScreen(location); 
    g.CopyFromScreen(screenP.X, screenP.Y, 0, 0, new Size(1, 1)); 
    Color col = bmp.GetPixel(0, 0); 
    bmp.Dispose(); 
    return col; 
} 

잘 작동하지만 훨씬 더 느리게 (10 배) 느린 것 같습니다. e는 DrawToBitmap을 사용합니다. 저는 PointToScreen이 이유와 테스트 버전이라는 것을 의심합니다. 매번 그래픽을 만들지 않고 그래픽을 넘기는 것은 느립니다.

그래서 CopyFromScreen 호출이 너무 느려서 픽셀 수가 중요하지 않다고 생각합니다. 합리적인 한도 내에서 아마. 내 색상 표 컨트롤은 약 60x400 픽셀입니다.

당분간 원래의 GetColor 솔루션을 사용해도 좋습니다.