2012-04-30 3 views
1

내 첫 번째 질문은 여기에 있습니다. 그리고 그것은 쉬운 일이지만, 솔루션을 찾을 수 없는데, 많은 것을 읽었고, 내가해야 할 일을 어떻게 이해할 수 없는지 알았습니다.C에서 PictureBox에 비트 맵을 사용하여 그리기 #

  • 나는 *을 가지고 있습니다. GIF 파일, 내가 getPixel와에 액세스 할 수 있도록 내가 System.Drawing.Bitmap에 저장할
  • 내가 어떤 컨트롤에 내 그림을 갖고 싶어() 메소드 지금까지 내가 '무엇을

을 (현재 PictureBox을 시도) 가지고있어 :

  • 내가 파일에서 템플릿, Bitmap을 만들 - (코드 map_t)
  • 내가 실제로 그려 질 비트 맵을 생성 (지도)
  • 을하고 작동 나는 비트 맵 내에 PictureBox 이미지를 설정할 수 있습니다
    • 수 없습니다이 비트 맵을 변경하십시오. 또는 할 수 있지만 결과가 표시되지 않습니다
    • 나는 그 비트 맵에서 Graphic을 작성한 다음 변경해야한다고 생각했습니다. 나는 내가 무엇을 놓치고 있는지 전혀 모른다. 여기

코드입니다 : MapCanvas 폼에있는 PictureBox입니다, 모든 것을 내가 포인터 주위에 약간의 동그라미를 만들려고했기 때문에, MouseMove 이벤트에 -이 코드로 결국 그렇게 작동하지 않았다 어느 쪽도 작동하지 않습니다. 나는 여기에 ... 아무것도 할 수 없다, 내가 찾을 수있는 모든 질문을 읽어 코드의 한 :

namespace Projekt_innowacje 
{ 
    public partial class MapForm : Form 
    { 
     Bitmap map_t; 
     Bitmap map; 

     public MapForm() 
     { 
      InitializeComponent(); 
      map_t = new Bitmap("map.gif", true); 
      map = new Bitmap(map_t.Width, map_t.Height); 
      MapCanvas.Image = map; 
     } 

     private void MapCanvas_MouseMove(object sender, MouseEventArgs e) 
     { 
      Graphics canvas = Graphics.FromImage(map); 
      for (int i = 0; i <= map.Width; i++) 
       for (int j = 0; j <= map.Height; j++) 
        if (map.GetPixel(i, j) == Color.Red) 
         canvas.DrawLine(new Pen(Color.Blue), i, j, i + 1, j + 1); 

         // map.SetPixel(i, j, map.GetPixel(i, j)); // also doesn't work   

      //MapCanvas.Refresh(); 
      MapCanvas.Invalidate(); 

      canvas.Dispose(); 
     } 
    } 
} 
+0

BMP 또는 JPEG를 사용해 보셨습니까? GIF는 색인 된 색상을 사용하며 대개 임의로 그릴 수 없습니다. – Ani

+0

GIF 파일에서만 픽셀을 읽으므로이 문제는 없습니다. 보시다시피, 나는 gif 파일 크기의 새로운 비어있는 비트 맵을 그려 봅니다. – wasyl

+0

아, 내 실수. – Ani

답변

1

당신이 map 이미지에 다른 변경하지 않는 한 캔버스 /지도 이미지를 수정하지 않습니다 보이고있다 코드가 너는 공유하지 않는다. 루프에서 map.GetPixel을 테스트하지만 map은 생성자에서 빈 이미지로 만들어 지므로 어떤 픽셀도 Color.Red이되지 않습니다. 템플릿 대신 테스트 해 보시겠습니까?

또한 색상 비교에 대해 이야기하는 this question을 살펴볼 수도 있습니다. ==Equals은 단순히 색상 값을 비교하는 것 이상의 의미를 갖기 때문에 색상 구조에서 .ToArgb() 방법을 사용하는 기본 색상 비교를 제안합니다.

+0

다른 변경 사항이 없습니다. 당신 말이 맞았습니다. 나는 map_t에 대해 테스트하고 싶었지만,이 테스트에 대해서도 코멘트하는 것은 도움이되지 않습니다. 그렇다면 '맵'을 변경하고 변경된 이미지를 그리려면 무엇이 부족한가요? 이전 줄 대신에'map.SetPixel (...) '주석 달린 줄이 도움이되지 않습니다. 이것은 나에게 미스터리입니다. 또한이 코드는 이미 내가 찾은 코드와 매우 유사하지만 필요한 정확한 코드는 없었으므로 잘못된 방식으로 수정해야했습니다. – wasyl

+0

나는 당신의 문제를 생각하지 않습니다. 그림 상자를 업데이트하는 중, 상자를 업데이트해야합니다 (간단한 예 : https://gist.github.com/2563600 참조). if 문은 이미지를 변경하지 못하게합니다. – heavyd

+0

대단히 감사합니다!테스트가 잘못되었지만 사실 내 문제가 발생한 이유는'MapForm.Enabled'가'False'로 설정 되었기 때문입니다! 그리고 그것 때문에 MouseMove 이벤트는 전혀 호출되지 않을 것입니다 ... 당신은 이것이 작동해야한다고 말하면서 그것을 찾도록 도왔습니다 - 그리고 그것은 (모두'map.SetPixel'과'canvas.DrawLine' 두 가지입니다.) 아마 어떤 thime을 위해 이것을 할 것입니다. 다시 한번 감사드립니다! :) – wasyl

관련 문제