Dưới đây là một ví dụ nhỏ mà làm sáng tỏ một vài điều cho tôi (tôi đã phải vật lộn với điều này một chút quá).
pBox là một PictureBox trên Form1, làm cho nó ít nhất 50x50
appPath được bắt nguồn từ System.Reflection nhưng sử dụng bất kỳ đường dẫn mà bạn muốn
Có hai nút, một cho bản vẽ, một cho tiết kiệm, sự kiện nhấp chuột của họ nằm trong mã bên dưới.
Những điều tôi học được:
(1) "pBox.Image =" không làm gì cả nhưng khởi tạo hình ảnh pBox, nó KHÔNG phải là một tên tập tin như MỌI ví dụ tôi tìm thấy sử dụng (tiết kiệm có vấn đề vào cùng một tệp đó vì nó đã được chia sẻ bị khóa). Ngoài ra, nếu mục tiêu của bạn là nhìn thấy mọi thứ trên bề mặt của toàn bộ điều khiển, có thể bạn sẽ muốn đặt kích thước lúc khởi tạo với kích thước bạn cần. Tôi đã sử dụng kích thước của pBox trong ví dụ này nhưng thông thường tôi sử dụng kích thước bitmap (vì tôi thường bắt đầu với một tệp hình ảnh thực).
(2) Tôi luôn gặp sự cố khi thấy các hình vẽ hiển thị trên điều khiển hoặc nhìn thấy các thay đổi của tôi được lưu trong tệp đầu ra (hoặc cả hai). Trong các nỗ lực trước đây của tôi, tôi sẽ lặp lại các bản vẽ cả trên điều khiển và trên bitmap. Tất nhiên điều đó là không cần thiết nhưng bitmap chỉnh sửa DOES cần phải được tải lại vào control.image ... và đó là phần của câu đố này tôi đã mất tích.
(A) Tạo một bitmap từ control.image và vẽ trên bitmap
(B) Load bitmap vào control.Image (do đó bạn có thể thấy những thay đổi gây ra bởi sự bốc thăm)
(C) Lưu control.Image
(2-tùy chọn) Bạn có một bitmap toàn cầu (hoặc thông qua) (có thể là từ một tập tin thực)
(A) Vẽ trên bitmap
(B) Load bitmap vào control.Image (để bạn có thể xem các thay đổi)
(C) Lưu bitmap
public Form1()
{
InitializeComponent();
pBox.Image = new Bitmap(pBox.Width, pBox.Height);
}
private void DrawStuff1_Click(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(pBox.Image);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(Brushes.Red, 5, 5, 25, 25); //hard-coded size to reduce clutter
pBox.Image = bmp; //this makes your changes visible
}
private void Save_Click(object sender, EventArgs e)
{
pBox.Image.Save(appPath + "SavedImage.bmp");
}
Hi Bạn có thể làm rõ/cung cấp cho một ví dụ? – tguclu