2014-11-10 13 views
0

C# 및 GDI + 작은 게임을 만들려고하는 임. 학습 목적으로 가능한 한 많은 프레임 워크 등을 피하려고 노력하고 있습니다. 그래서 GDI +에 대한 몇 가지 구체적인 질문이 있습니다G # + C#

GDI의 region 객체를 이미지로 채울 수 있습니까? - 그렇지 않은 경우 수동 방법이 있습니까?

비트 맵이 아닌 그래픽 객체에서 단일 픽셀을 읽고 설정할 수 있습니까?

GDI의 전반적인 성능 향상에 대한 조언이 있으십니까? 어떤 도움

감사

+0

스택 오버플로가 너무 광범위합니다. 우선 질문 당 하나의 질문을하십시오. 첫 번째 두 개는 괜찮습니다 (현재 가지고있는 모든 코드 샘플). 세 번째는 분명히 * 너무 광범위합니다. – BradleyDotNET

답변

1

이미지로 GDI의 영역 객체를 채울 수 있습니까?

영역을 채울 수 없으며 픽셀을 저장하지 않습니다. 거의 확실하게 여기서 찾고있는 것은 Graphics.Clip 속성입니다. 영역을 할당하고 이미지를 그릴 때 영역에 의해 잘립니다.

비트 맵이 아닌 그래픽 객체에서 단일 픽셀을 읽고 설정할 수 있습니까?

아니요, Graphics 객체는 픽셀 자체를 저장하지 않으며 그리는 위치 만 추적합니다. Windows의 "장치 컨텍스트"가 말합니다. 어떤 비트 맵, 화면, 프린터, 메타 파일 수 있습니다. 이러한 장치 컨텍스트 중 일부는 그리기 후에 픽셀을 다시 읽을 수있는 것은 아닙니다 (예를 들어, 메타 파일이 아닌 프린터가 아닙니다). 그러나 물론 비트 맵을 그릴 때 문제는 없습니다.

GDI의 전반적인 성능 향상에 대한 조언이 있으십니까?

중요한 하나가 있습니다.NET을 매우 쉽게 감상 할 수 있습니다. 그리는 비트 맵의 ​​픽셀 형식은 매우 중요합니다. 비트 맵으로 할 수있는 가장 비싼 일은 입니다. CPU 메모리에서 비디오 어댑터의 메모리로 복사됩니다. 이 복사본은 픽셀 형식이 비디오 어댑터에서 사용하는 형식과 정확히 일치하는 경우에만 빠릅니다. PixelFormat.Format32bppPArgb 인 모든 최신 기계에서. 차이는 크다. 다른 모든 것보다 빠르다.

0

많은 답변하는 것입니다 자세히 이러한 점 :

  1. 당신은 일단 픽셀이 그려진 곳이 제한됩니다 Region. 읽는이가 아마 단지 인치 mm 포인트에서 Pixel 모드에서뿐만 아니라 다양한 Units 작동하지 수 Graphics 뒤에 만 perverted wayPixelGraphics.FillRectangle(br, x,y,1,1);하여 그 이유를 설정 한 후
  2. Graphics.DrawImage 어떤 방법을 사용합니다 ..
    • Lockbits을 사용하십시오. 단 하나의 example using one Bitmap. 다른 일반적인 작업은 두 개의 (하나의 입력 하나 출력) 비트 맵 또는 두 개의 입력 및 하나의 계산 된 출력 비트 맵을 잠글 것을 요구합니다. 의 ImageList, 그것은 많은 일을하지만, 그것이 무엇을하는 데 유용 할 수없는, 그건 Panel를 사용하는 경우
    • 학습 크기와 색상 깊이의 캐시 이미지입니다 때 Picturebox
+0

다른 답변은 성능 팁에 대한 [유용한 링크] (http://www.codeproject.com/Tips/66909/Rendering-fast-with-GDI-What-to-do-and-what-not-to)를 언급했습니다. . –

+0

조금 짧지 만 나만큼 괜찮아! – TaW