2011-05-13 4 views
0

일부 이미지 처리 작업을하고 있으며 디버깅을 위해 원래 비트 맵에 색상을 중첩합니다.하나의 픽셀을 무효화합니까?

문제는 이미지를 줌으로 설정 때마다 나는 픽셀이 정말 느린 업데이트하고 단지 (동일한 크기의 이미지에 대한) 큰 PictureBox를가 느린 도착

을 무효화 SizeMode와 그림 상자에서 렌더링입니다 내가 생각한 것은 내가 변경 한 픽셀 만 무효화하는 것입니다. 그러나 컨트롤에 렌더링 된 사각형으로 변경된 픽셀의 좌표를 어떻게 변환하는지 모르겠습니다. 분명히 이미지가 원본 이미지보다 크게 그려진다면 내가 무효화하는 사각형이 둘 이상의 픽셀이 될 것입니다.

답변

1

추가 사진 수두의 줌과 패딩을 얻을 수있는 방법

다음
private void CalculateZoomAndPadding() 
    { 
     Double imageAspect = (Double)pictureBox1.Image.Width/(Double)pictureBox1.Image.Height; 
     Double pbAspect = (Double)pictureBox1.Width/(Double)pictureBox1.Height; 
     Boolean heightRestricted = imageAspect < pbAspect; 
     hPadding = 0; 
     vPadding = 0; 
     if (heightRestricted) 
     { 
      zoom = (Double)pictureBox1.Height/(Double)pictureBox1.Image.Height; 
      Double imageWidth = (Double)pictureBox1.Image.Width * zoom; 
      hPadding = (Double)(pictureBox1.Width - imageWidth)/2d; 
     } 
     else 
     { 
      zoom = (Double)pictureBox1.Width/(Double)pictureBox1.Image.Width; 
      Double imageHeight = (Double)pictureBox1.Image.Height * zoom; 
      vPadding = (Double)(pictureBox1.Height - imageHeight)/2d; 
     } 
    } 

같이 무효라는 픽셀 무효화 : 내가 처음 이런 짓을 할 때

pictureBox1.Invalidate(new Rectangle(Convert.ToInt32(Math.Floor(x * zoom)) + Convert.ToInt32(hPadding) -1, Convert.ToInt32(Math.Floor(y * zoom)) + Convert.ToInt32(vPadding) -1, PixelSize, PixelSize)); 

내가 단지를 무효화를 픽셀에 의해 직접적으로 덮여 있지만, 이것이 반올림 에러의 대상이되어 약간의 여분을 포함하도록 확장되었다.

1

모든 픽셀을 변경 한 다음 이미지를 한 번만 무효화 할 수 있습니까?

+0

그런 식으로 각 픽셀에서 이미지 처리가 어떻게 작동하는지 알지 못한다. 나는 거기에 도착하는 단계 대신 완성 된 제품만을 얻는다. –

+0

어쨌든 모든 픽셀에서 효과가있는 것을 보지 못할 것입니다. 그렇지 않으면 처리 속도가 느려지지는 않습니다. 모니터가 1 초에 1000 번 업데이트 할 수 없음을 잊지 마십시오. – Mario

+0

조사하고 싶은 지역을보고있을 때 그것을 숙제하고 있지만 큰 이미지를보고있을 때 관심있는 곳으로 이동하는 데 10 분 정도 걸릴 수 있습니다. –

0

나는 전체 컨트롤을 무효화하는 초당 30 번 또는 60 번을 발생시키는 타이머를 추가하기 만합니다. 업데이트에 약간의 지연이있을 수 있지만 모니터의 새로 고침 빈도가 60 Hz 일 가능성이 높기 때문에이를 눈치 채지 못할 것입니다.

+0

그건 ** ** 초당 30 번 무효화 할 수 있다고 가정합니다. –

관련 문제