2009-11-14 8 views
4

Drawing.Graphics 개체와 DrawImage() 함수를 사용하여 많은 이미지 (모두 dimension = 24x24 pixelformat = 32BppPArgb)를 컨트롤로 그립니다. 내 응용 프로그램에서 축소 할 수 있습니다. 즉, Graphics 객체에는 확대/축소 및 패닝을 제어하는 ​​Transform Matrix가 첨부되어 있습니다.GDI +에서 사용자 지정 투명도를 사용하여 이미지 그리기

확대/축소가 50 % 이하로 떨어지면이 아이콘을 그리는 데는 아무런 문제가 없지만 그리기 아이콘에서 아이콘을 부드럽게 그리지 않도록 전환하고 싶습니다. 즉, 70 %부터 아이콘은 50 %에서 완전히 투명 해 지도록 투명도 요소를 추가로 그려야합니다.

DrawImage()보다 상당히 오래 걸리지 않고 투명도가 추가 된 비트 맵을 그리려면 어떻게해야합니까?

감사합니다, 데이비드

+0

나는 이것이 GDI + 질문이라는 것을 알고 있지만 WPF 로의 업그레이드를 고려 했습니까? 그것은 이런 것들을 절대적으로 사소한 것으로 만들고, 다른 여러 이점들을 가지고 있습니다. 그것은 귀하의 애플 리케이션이 WPF의 고급 기능의 혜택을 누릴만큼 복잡하다는 것 같습니다. –

+0

@ 레이, 개발에 3 년이 걸린 응용 프로그램의 50 % 이상을 다시 작성해야합니다. 투명 비트 맵을 원하지만이 비용은 아닙니다. –

답변

7

당신은 단지 ImageAttributes이 객체를 초기화하고 ImageAttributes은 Graphics.DrawImage의 오버로드 된 버전 중 하나에 반대 되었 적절한 ColorMatrix을 만들 수 있습니다. 이 샘플은 50 %의 트랜스 퍼런시를 제공합니다 :

float[][] matrixAlpha = 
    { 
    new float[] {1, 0, 0, 0, 0}, 
    new float[] {0, 1, 0, 0, 0}, 
    new float[] {0, 0, 1, 0, 0}, 
    new float[] {0, 0, 0, 0.5f, 0}, 
    new float[] {0, 0, 0, 0, 1} 
    }; 
    ColorMatrix colorMatrix = new ColorMatrix(matrixAlpha); 

    ImageAttributes iaAlphaBlend = new ImageAttributes(); 
    iaAlphaBlend.SetColorMatrix(
    colorMatrix, 
    ColorMatrixFlag.Default, 
    ColorAdjustType.Bitmap); 
+0

Danbystrom에게 감사 드리는 바입니다. 제가 찾고 있던 것 같습니다. –

관련 문제