문제

우선, 이것은 그림 박스 제어를 투명하게 만드는 것이 아닙니다. 완전히 불투명 한 "캔버스"의 비트 맵 투명성에 관한 것입니다.

PictureBox의 크기는 항상 흰색 배경으로 300*300입니다. 제어에는 투명성이 필요하지 않습니다.

내가 필요로하는 것은 투명한 사각형 (또는 다른 무엇이든)를 그림 상자에 끌어들이는 방법이므로 이미 사각형을 통해 "가 있던 모든 것은"사각형 "을 통해 볼 수 있습니다.

다음 코드가 있다고 말합니다

Bitmap bmp = new Bitmap(300, 300);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(new SolidBrush(Color.White), 0, 0, 300, 300);
g.FillRectangle(new SolidBrush(Color.Red), 100, 100, 100, 100);
pictureBox.Image = bmp;

이것은 흰색 캔버스의 중간에 빨간 사각형을 그립니다. 이제 다른 사각형이 포함 된 그림에 또 다른 (투명한) "레이어"가 필요하지만 투명한 것입니다.

내가 시도 할 수 있습니다

Brush brush = new SolidBrush(Color.FromArgb(128, 0, 80, 0));
g.FillRectangle(brush, 50, 50, 200, 200);

알파 = 128을 지정하여 색상을 사용하고 있으므로 결과 사각형은 투명해야하므로 첫 번째 빨간 사각형을 다른 녹색 사각형을 통해 볼 수 있어야합니다.

그러나 이것은 올바르게 발생하지 않습니다. 나는 새로운 녹색의 뒤에있는 빨간색 사각형을 볼 수 있지만, 빨간색 사각형의 일부는 빨간색 사각형의 일부가 완전히 불투명하게 유지됩니다. 그러나 색상의 알파 값을 매우 작은 값 (예 : 1-5)으로 설정하면 전체 사각형이 투명 해 보입니다. 이것은 내 생각에 정상이 아닙니다. 5/255는 절반에 불과하고 128/255가 투명하지 않습니다 ... G.DrawString ()을 사용하여 이전에 그리기 한 문자열이 있으면 문자열이 뒤에 표시됩니다. 녹색 사각형 또는 투명성 수준에 따라 그렇지 않습니다. 예를 들어 알파가 40보다 크거나 (약) 40보다 크면 문자열이 전혀 보이지 않으며 40 미만이면 더 작은 알파 값에 대해 알파 = 0까지 더 많이 보입니다.

이 브러시 (ArgB 색상에서 생성 될 때)는 어떻게 적용됩니까? 내가 뭔가를 놓치고 있습니까? 나에게 투명 브러시를 설정하면 객체를 "가시가 적다"고 설정하는 대신 배경을 "가시"로 만드는 것 같습니다.

제안이있는 답변에 감사드립니다.

편집하다 응용 프로그램 논리에서 불쾌한 버그가있는 것 같습니다. 그래서 드로잉 루틴은 루프에서 발생 했으므로 특정 수의 투명한 사각형을 축적 할 때 점점 더 두껍게되었습니다.

루프에서 벗어난 코드는 올바르게 작동합니다.

내 잘못이야.

도움이 되었습니까?

해결책

대체 텍스트 http://lh4.ggpht.com/_1tpop7dzy1e/s02ivaoggti/aaaaaaac6s/zqvzq5gdwsu/s800/capture4.png

이 코드에 의해 수행됩니다.

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        Bitmap bmp = new Bitmap(300, 300);
        Graphics g = Graphics.FromImage(bmp);
        g.FillRectangle(new SolidBrush(Color.White), 0, 0, 300, 300);
        g.FillEllipse(new SolidBrush(Color.Blue), 25, 25, 100, 200);
        g.FillRectangle(new SolidBrush(Color.Red), 100, 100, 300, 100);
        g.DrawString("this is a STRING", SystemFonts.DefaultFont, 
            Brushes.Black, new Point(150, 150));
        pictureBox1.Image = bmp;

        Brush brush = new SolidBrush(Color.FromArgb(40, 0, 80, 0));
        g.DrawRectangle(Pens.Black, 50, 50, 200, 200);
        g.FillRectangle(brush, 50, 50, 200, 200);
    }

녹색 부분은 볼 수 있듯이 불투명하지 않습니다 ... 문자열은 완벽하게 보입니다.

나에게 투명 브러시를 설정하면 객체를 "가시가 적다"고 설정하는 대신 배경을 "가시"로 만드는 것 같습니다.

배경 "더 눈에 띄는"과 개체 "가 눈에 띄지 않는 것"은 같은 것입니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top