저는 Aero 유리 효과를 사용하는 응용 프로그램을 가지고 있으므로 각 픽셀에는 빨강, 녹색 및 파랑 값 이외에 알파 값이 있습니다. 단색 흰색 배경 (알파 = 255)이있는 사용자 지정 그리기 컨트롤이 하나 있습니다. GDI 텍스트 함수를 사용하여 솔리드 텍스트를 컨트롤에 그리기를 원합니다. 그러나이 함수는 알파 값을 임의의 값으로 설정하여 텍스트가 내 응용 프로그램 아래에있는 모든 윈도우를 반투명하게 표시합니다.GDI 텍스트 함수를 호출 한 후 알파 값을 수정하려면 어떻게합니까?
텍스트 렌더링을 호출 한 후 컨트롤의 모든 픽셀을 살펴보고 알파 값을 다시 255로 설정하고 싶습니다. 어떻게하는 것이 가장 좋습니까?
나는 BitBlt
, GetPixel
및 SetPixel
기능과 함께 운이 없었습니다. 그들은 알파 값을 모르는 것처럼 보입니다.
- 그리기 비트 맵으로, 다음 장치에 비트 맵을 복사 :
는 여기에 내가 생각하고 거부 한 다른 솔루션을있는이 방법, 텍스트 렌더링의 특성을 사용하지 않습니다 모니터 (예 : ClearText). GDI가 비트 맵 에 정확히으로 렌더링되도록하는 방법을 알면 내 문제도 해결됩니다.
- 텍스트 렌더링에 GDI + 사용 :이 응용 프로그램은 원래 Aero 지원 작업을 시작하기 전에 텍스트 렌더링에 GDI +를 사용했습니다. GDI +로 문자열을 정확하게 측정하려고 어려움을 겪었 기 때문에 GDI로 전환했습니다. 나는 차라리 뒤를 돌아 보지 않을 것이다.
- 문제의 제어를 피하기 위해 Aero 영역을 설정하십시오. 내 응용 프로그램의 윈도우는 실제로 다른 프로세스에서 실행되는 다른 응용 프로그램의 하위 윈도우입니다. 최상위 창에서 Aero 설정을 직접 제어 할 수는 없습니다.
응용 프로그램은 Win32 API 함수를 호출하기 위해 Interop를 사용하는 것이 아니지만 Windows Forms를 사용하여 C#으로 작성되었습니다.
코드 스타일에 대한 메모 : 중괄호없이 서로를 사용하여 모든 using() 문을 쓸 수 있습니다. (something)
사용 (something)
(something)
{...} – ygoe
그냥 궁금 해서요. , GDI + 텍스트 렌더링을 사용하여이 구현을 성능 테스트 해 보셨습니까? – series0ne
또한 투명한 비트 맵을 사용하도록 수정 될 수 있습니까? - 분명히 BufferedGraphics에서 사용하는 버퍼는 알파 채널을 지원하지 않습니다 ... 어떤 생각입니까? – series0ne