2014-10-06 20 views
5

Tôi đang vẽ một số đồ họa trên vùng điều khiển nhiều lần và mỗi khi tôi muốn bắt đầu mới với nền trong suốt. Vì vậy, tôi sử dụng:C# Graphics.Clear (Color.Transparent) không hoạt động bình thường?

Graphics graph = control.CreateGraphics(); 
graph.Clear(Color.Transparent); 

Tuy nhiên, khu vực đồ họa dường như chuyển sang màu đen thay vì trong suốt. Bất kỳ ý tưởng?

+2

Các chức năng đồ họa như Clear cơ bản là không có op khi được sử dụng với 'Color.Transparent'. 'graphics.Clear (Color.Transparent)' không có nghĩa là "làm cho nó như vậy mà toàn bộ không gian đồ họa của tôi là trong suốt". Thay vào đó, nó có nghĩa là, "rõ ràng toàn bộ không gian đồ họa của tôi bằng cách vẽ màu 'trong suốt' trên không gian hiện tại của tôi". –

+0

Để chẩn đoán lý do tại sao nó chuyển sang màu đen, chúng tôi có thể cần thêm thông tin. Đây có phải là điều khiển tùy chỉnh trong trình xử lý sự kiện Paint không? Bạn có đặt bất kỳ ControlStyles nào không? –

+0

Và làm bạn đau đớn trong một override 'OnPaint' ... tránh' CreateGraphics' ... nó là ác. – DonBoitnott

Trả lời

2

Tôi tìm thấy một cách thay thế để đạt được những gì tôi cần. Tôi tạo ra một bitmap trong suốt mới với kích thước của điều khiển, vẽ công cụ của tôi vào nó và sau đó sử dụng nó như là một hình nền cho sự kiểm soát:

Bitmap bitmap = new Bitmap(control.Width, control.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
    bitmap.MakeTransparent(); 
    Graphics graph = Graphics.FromImage(bitmap); 

    // draw stuff here ... 

    control.BackgroundImage = bitmap; 
    graph.Dispose(); 

này hoạt động hoàn hảo.

+1

Sẽ tốt hơn nếu bạn làm việc với việc sử dụng câu lệnh để tạo các đối tượng, thực hiện giao diện IDisposable. Lợi ích to lớn của việc này là, bạn không phải quản lý việc xử lý các vật thể của mình. Vì vậy, để thay đổi thực hiện sạch hơn Đồ thị đồ thị = Graphics.FromImage (bitmap); để sử dụng (Đồ thị đồ họa = Graphics.FromImage (bitmap)) { // vẽ nội dung ở đây ... control.BackgroundImage = bitmap; } – Dom84

+0

Trong trường hợp của tôi, tôi cũng cần phải làm 'graph.Clear (Color.Transparent);' để làm cho nó hoạt động. Nhưng cảm ơn câu trả lời của bạn! –

0

vì picturebox không có lớp trong suốt. bạn có thể sử dụng bitmap chuyển. hãy thử điều này.

 tmp_bmp = new Bitmap(picturebox1.Width, picturebox1.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
     Graphics Canvas = Graphics.FromImage(tmp_bmp); 
     picturebox1.Image = tmp_Type; 

     Type_Canvas.Clear(Color.Transparent); 
Các vấn đề liên quan