2012-06-21 1 views
1

현재 C# 비트 맵 및 그래픽을 사용하여 간단한 이미지 조작기를 코딩하고 있습니다. 나는 costum 투명한 elemt를 사용하고 있습니다. 내 Draw-Method에서 그림을 설정하여 그림을 설정하여 컨트롤을 업데이트합니다.C# 그래픽 픽셀 덮어 쓰기 강제

ImageAttributes attr = new ImageAttributes(); 
attr.SetColorKey(this.transpKey, this.transpKey); 
Rectangle dstRect = new Rectangle(0, 0, this.image.Width, this.image.Height); 
e.Graphics.DrawImage(this.image, dstRect, 0, 0, this.image.Width, this.image.Height, GraphicsUnit.Pixel, attr); 
e.Graphics.Dispose(); 

이제 일부 픽셀을 지우는 기능이 필요합니다. BackgroindImage에서 양식과 그림을 사용하여 TransparencyKey-Prperty를 사용하여 픽셀을 "지울"수 있습니다. 그러나이 복종은 나의 복장 조절에 존재하지 않는다. 그것이 "attr.SetColorKey (this.transpKey, this.transpKey);"를 사용하는 이유입니다.하지만 문제가 있습니다. 픽셀을 투명하게 만들고 언더 라이닝하는 픽셀을 볼 수 있습니다.
C#을 사용하여 픽셀을 남겨 두지 않고 강제로 교체하는 방법을 알고 있습니까? 아니면 누구든지 내 문제에 대한 해결책을 알고 있습니까?
읽고 생각하고 어쩌면 도움을 주셔서 감사합니다.

// 편집 : 이제 "e.Graphics.CompositingMode = CompositingMode.SourceCopy;"를 사용할 수 있다는 것을 알았습니다. 픽셀을 교체해야한다고 설정합니다. 그러나 그 후에는 투명성이 파괴됩니다. 결과도 같습니다. 아무것도 지워지지 않았습니다. 어떤 해결책?

+0

100 % 확신 할 수는 없지만 e.Graphics.DrawImage를 호출 한 후 덮어 쓰려는 픽셀을 덮어 쓰려면 크기가 1x1 인 사각형으로 e.Graphics.DrawRectangle을 호출 할 수 없습니다. e.Graphics.Dispose를 부르시겠습니까? – ekolis

+0

아니요. 먼저 지우고 싶은 텍스트, 선, 사각형 또는 픽셀이 이미 과도하게 렌더링되어 있으므로 도움이되지 않습니다. 그리고 그것이 문제입니다. 그려진 픽셀을 지울 수는 없습니다. 고무를 사용하는 것처럼 픽셀을 지나치게 많이 사용하여 ImageAttribute를 사용하여 투명하게 만들려고 시도했습니다. 그러나 위에서 말한 문제가 있습니다. 삭제하려는 픽셀이 지워지지 않습니다. – David

답변

0

내 솔루션을 공식적으로 제공하려면 : 여러 레이어를 사용하여 해결했습니다. 깨끗하지는 않지만 작동합니다.

0

컨트롤이 그림 순서대로 z- 순서대로 하나씩 그려지기 때문에 지우기가 없습니다. 먼저 양식 배경이 그려지고 라벨이 붙은 다음 컨트롤이 그려집니다. 무언가가 그려지면 거기에 머물러있는 층이 없습니다.

뭔가를 '지우려면'유일한 방법은 자신이 사용할 수있는 일종의 버퍼로 자신을 다시 그려 넣기 위해 컨트롤 아래에있는 컨트롤에 대한 방법을 찾는 것입니다.

오래 전에 시도해 보았습니다. 구현하기가 끔찍하고 오류가 발생하기 쉽기 때문에이 방법을 포기했습니다.

나쁜 소식을 듣고 죄송합니다. 제 경험에서 통찰력을 얻을 수 있기를 바랍니다.

+1

저는 costum 컨트롤을 사용하고 있으며 모든 draw-event를 다시 그립니다. 내 질문은 System.Drawing.Graphics/Bitmap에 관한 것입니다. 컨트롤은 괜찮습니다. – David

0

"지우기"에 대한 정의는 무엇입니까? 저에게 그것은 배경의 색으로 색을 칠하는 것을 의미합니다. 투명도를 사용하여 영역을 배경색으로 렌더링하면됩니다.

+1

지우기 란 다시 투명성이 있다는 뜻입니다. 배경에 원본 이미지가 있기 때문에 색상이있는 솔루션은 유용하지 않습니다. 내가 이것을 너무 많이 원한 이유는 선과 직사각형을 그릴 수 있기 때문입니다. 그리고 거기에는 모든 새로운 영역이 있습니다. 그리고 그 지역은 지워 져야합니다. – David

+0

@ user1141147 큰 환경에서는 명확하지 않습니다. transparent controlx를 레이어링 했습니까? 아니면 사용자 정의 Bitmap Designer에서 구현 했습니까? 스프라이트처럼 움직이는 사각형을 시뮬레이트하거나 다른 것입니까? 가능한 경우 우리에게 모든 배경을 더 많이 제공하기 위해 원래의 질문을 편집하면 도움이 될 수 있습니다. – tcarvin

+0

두 번째. 나는 여러 레이어를 사용하고 레이어를 지움으로써 그것을 해결했다.깨끗하지는 않지만 작동합니다. – David