Làm cách nào để vẽ hình tròn và đường kẻ trong hình tượng?Làm cách nào để vẽ hình tròn và đường kẻ trong hình tượng?
Trả lời
các picturebox là một điều khiển và có một hình ảnh như nguồn - vì vậy bạn phải vẽ vào hình ảnh và đưa hình ảnh để điều khiển để hiển thị nó
MyImage = new Bitmap(fileToDisplay);
pictureBox1.ClientSize = new Size(xSize, ySize);
pictureBox1.Image = MyImage;
Cách tốt nhất là KHÔNG vẽ hình tròn và đường thẳng trong hình tượng! Nó không được thiết kế cho mục đích đó.
Từ GDI + blog của Bob Powell:
Các gốc rễ của vấn đề này là các quy tắc cơ bản của cửa sổ lập trình đã bị phá vỡ. Và hậu quả của hộp hình ảnh là nguyên nhân của một thứ không phải là lỗi của nó. Để giúp giải thích lý do tại sao, bốn điểm dưới đây mô tả những gì đã xảy ra trong trường hợp này.
Điều khiển PictureBox là để hiển thị hình ảnh. Nó không phải là một giữ chỗ tiện dụng cho một bề mặt đồ họa.
Windows là một hệ thống điều khiển sự kiện trong đó mỗi sự kiện phải được phục vụ trong ngữ cảnh và sự kiện đúng để xử lý các sự kiện nhấp chuột hoặc di chuyển chuột không được sử dụng để vẽ trên màn hình hoặc các nội dung lạ khác.
PictureBox tự làm mới bằng cách vẽ đối tượng dựa trên System.Drawing.Image được lưu trữ trong thuộc tính Hình ảnh của nó. Nếu không có hình ảnh, nó sẽ hiển thị màu nền.
Đánh cắp và vẽ trên đối tượng Đồ họa của bất kỳ điều khiển nào là không tốt, nên được khuyến khích mạnh mẽ và phá vỡ các quy tắc xử lý sự kiện ở đúng nơi vào đúng thời điểm. Về cơ bản, nếu bạn làm điều này, nó sẽ khiến bạn đau đớn. Khi bạn đập đầu vào tường, nó làm bạn đau. đó là dấu hiệu cho thấy bạn nên ngừng làm việc đó. Nó giống nhau cho các cuộc gọi PictureBox.CreateGraphics.
Cách đúng để thực hiện.
Thực hiện theo các quy tắc của hệ thống điều khiển sự kiện thật dễ dàng nhưng yêu cầu một số tiền nhỏ được khuyến nghị là . Vì vậy, nếu bạn muốn vẽ một ít đồ họa và giữ nó ở đó khi một cửa sổ di chuyển trước mặt nó và quay lại hoặc khi bạn thu nhỏ và khôi phục, bạn phải phục vụ sự kiện Sơn bất kỳ đối tượng nào mà bạn muốn vẽ lên. PictureBox mang hành lý xung quanh với nó là không cần thiết cho loại ứng dụng này. Nếu bạn chỉ muốn vẽ một thứ gì đó trong một địa điểm , hãy vẽ nó trên biểu mẫu bằng cách trả lời sự kiện Form.Paint. Nếu bạn muốn trình giữ chỗ tiện dụng cho hình ảnh hoạt động trong giới hạn được đặt, hãy sử dụng điều khiển Bảng điều khiển và dịch vụ là sự kiện Paint. Nếu bạn muốn sao chép ảnh lặp lại cho hình ảnh công ty của mình, hãy tạo điều khiển và thực hiện thao tác vẽ trong ghi đè OnPaint.
gốc liên kết (không còn giá trị): http://bobpowell.net/picturebox.htm
Chú ý: Các link gốc vào blog Bob Powell là không còn chức năng. Tôi đã để nó ở đây vì mục đích lịch sử. Nội dung của trang vẫn có thể được xem trên lưu trữ internet (https://web.archive.org/web/20120330003635/http://bobpowell.net/picturebox.htm) kể từ ngày bài đăng này được chỉnh sửa.
+1 Đây thực sự là câu trả lời đúng. Cảm ơn bạn đã liên kết, mô tả vấn đề gốc. – Sabuncu
-1 "Linkrot" ... và câu trả lời này đưa ra vài gợi ý về vấn đề là gì hoặc phải làm gì thay thế. "Liên kết với các tài nguyên bên ngoài được khuyến khích, nhưng hãy thêm ngữ cảnh xung quanh liên kết để người dùng đồng nghiệp của bạn sẽ biết nó là gì và tại sao lại có liên kết đó. không thể truy cập hoặc ngoại tuyến vĩnh viễn ". Nguồn: http://stackoverflow.com/help/how-to-answer Tuy nhiên, tôi đã tìm thấy các trang bobpowell được lưu giữ trong "Máy Wayback": https://web.archive.org/web/20120216111903/http: //bobpowell.net/picturebox.htm –
Đây là một câu trả lời khủng khiếp. Các trang (nếu không tuyệt vời) của bobpowell không chỉ biến mất mà không có cách nào đề nghị bạn không nên vẽ lên một PictureBox. Trong thực tế, DoubleBuffering mặc định của chúng làm cho nó trở thành các điều khiển duy nhất phù hợp để vẽ ra khỏi hộp. Bob chỉ đơn thuần cảnh báo chống lại việc sử dụng 'Control.CreateGraphics' được rút ra khỏi tất cả các bản sao mới từ trang ví dụ MSDN khủng khiếp. – TaW
hay:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(
new Pen(Color.Red,2f),
new Point(0,0),
new Point(pictureBox1.Size.Width, pictureBox1.Size.Height));
e.Graphics.DrawEllipse(
new Pen(Color.Red, 2f),
0,0, pictureBox1.Size.Width, pictureBox1.Size.Height );
}
Xử lý sự kiện sơn của hộp hình ảnh và vẽ tùy chỉnh của bạn ở đó.
- 1. Làm cách nào để vẽ đường kẻ trong VIM?
- 2. Làm cách nào để vẽ hình tròn trong Unity3D?
- 3. Cách vẽ đường kẻ trong UITableViewCell
- 4. Làm cách nào để tạo ma trận hình ảnh với một đường kẻ được vẽ trong MATLAB?
- 5. Vẽ đường viền tròn xung quanh hình ảnh bằng Raphael
- 6. Vẽ nhiều đường kẻ trong một BufferedImage
- 7. Đường kẻ mịn được vẽ trong canvas
- 8. làm cách nào để vẽ một đường trên hình ảnh?
- 9. Cách vẽ hình ảnh điểm trên cạnh hình tròn
- 10. Vẽ khu vực hình tròn
- 11. Vẽ hình tròn trong Tkinter (Python)
- 12. Vẽ hình vuông với các góc tròn
- 13. Làm cách nào để vẽ biểu đồ hình tròn theo cách thủ công trong Android?
- 14. Vẽ đường kẻ và di chuyển nó theo chương trình
- 15. Dòng vẽ vải Android - làm cho đường kẻ dày hơn
- 16. Làm cách nào để vẽ hình elip hoặc vòng tròn tự do?
- 17. Làm cách nào để vẽ hình tròn bằng canvas trong Android?
- 18. Làm thế nào để vẽ một hình chữ nhật tròn (hình chữ nhật với các góc tròn) với OpenCV?
- 19. Làm thế nào để vẽ đường nét mịn/tròn?
- 20. Vẽ một phần của hình tròn
- 21. Làm thế nào để vẽ hình tròn, hình chữ nhật theo cách thủ công trên máy quay video android
- 22. Sử dụng đường cong Bezier để vẽ hình xoắn ốc
- 23. Làm thế nào để vẽ một hình tam giác với góc tròn sử dụng quartz2d/CoreGraphics
- 24. Làm cách nào để vẽ hình chữ nhật có đường nét đứt trong canvas?
- 25. Làm thế nào để mô hình dựng hình đối tượng trò chơi và hành vi theo cách mô-đun?
- 26. SVG - Làm thế nào để cắt ảnh thành hình tròn?
- 27. Làm cách nào để vẽ điểm bằng Đồ họa chính?
- 28. Vẽ hình chữ nhật đầy với đường viền trong android
- 29. Làm thế nào để vẽ một vòng tròn trong suốt?
- 30. Làm cách nào để tạo đường viền đứt nét với các góc tròn trong WPF?
Điều này vẽ __into một bitmap__, không __onto picturebox__. Nó hoạt động nhưng nó là somethng hoàn toàn khác nhau! – TaW