2013-06-19 34 views
14

Tôi hiểu rằng câu hỏi này đã được yêu cầu (và trả lời) trước đây. Tuy nhiên, không có giải pháp nào làm việc cho tôi. Điều này có thể là do sự thiếu năng lực của tôi, voodoo nguyền rủa hoặc một cái gì đó đơn giản và rõ ràng rằng tôi đang mất tích.Đang tải PictureBox Hình ảnh từ tệp tài nguyên có đường dẫn (Phần 3)

Dưới đây là một ảnh chụp màn hình của tất cả các mảnh có liên quan của các câu đố:

Screen capture http://dinosaur-island.com/PlantPictureBoxScreenCap.jpg

Như bạn có thể thấy có rất nhiều BMP cây nạp như nguồn lực vào thư mục Images. Có một biểu mẫu có hình tượng có tên "PlantPicture". Có chuỗi, mà tôi biết có một con đường tốt (vì tôi đã kiểm tra nó trong trình gỡ lỗi):

  PicPath = PicPath+".bmp"; 

Screen capture http://dinosaur-island.com/PlantDebugger.jpg

Tôi đã thử nhiều cách để tải, đúc vv, vv

Nếu bạn đáng tiếc và cho nó thêm một lần nữa, tôi sẽ đánh giá cao mọi lời khuyên. Cảm ơn!

Trả lời

28

Đường dẫn phải có dạng như sau: "Images\a.bmp". (Lưu ý việc thiếu một dấu gạch chéo hàng đầu, và các dấu gạch chéo là lại dấu gạch chéo.)

Và sau đó:

pictureBox1.Image = Image.FromFile(@"Images\a.bmp"); 

Tôi chỉ cố gắng để đảm bảo, và nó hoạt động. Đây là bên cạnh câu trả lời khác mà bạn có - để "sao chép luôn luôn".

+0

Đã đi qua rất nhiều để có được dấu gạch chéo ngược. PicPath = "@Images \ None.bmp" (đây là đường dẫn chính xác cho hình ảnh 'không') ... Ném lỗi: "Một ngoại lệ không được loại trừ của hệ thống" .IO.FileNotFoundException 'xuất hiện trong System.Drawing.dll. Thông tin bổ sung @Images \ None.bmp ... double-checked. None.bmp KHÔNG tồn tại trong cả tài nguyên và thư mục trên đĩa' Images ' – zetar

+1

@zetar "@ Hình ảnh \ None.bmp "là sai. @" Images \ None.bmp "là chính xác. @ Chỉ yêu cầu C# để _not_ thoát" N "sau" \ "và thay vào đó xử lý" \ "đơn giản chỉ là dấu gạch chéo ngược. Bạn cũng có thể làm điều đó với: "\\" (một dấu gạch chéo ngược kép.) – ispiro

+0

GOT IT! REMOVED @ trong chuỗi đã được truyền vào! – zetar

2

Đặt "Sao chép sang thư mục đầu ra" thành "Sao chép luôn" hoặc "Sao chép nếu mới hơn" có thể giúp ích cho bạn.

PicPath của bạn là đường dẫn tương đối được chuyển đổi thành đường dẫn tuyệt đối tại một thời điểm trong khi tải hình ảnh. Hầu hết có thể bạn sẽ thấy rằng không có hình ảnh trên vị trí được chỉ định nếu bạn sử dụng Path.GetFullPath(PicPath) trong Gỡ lỗi.

+0

tôi đã thay đổi để 'Sao chép luôn' ... đầu ra từ Path.GetFullPath (PicPath) là "C: \\ Images \\ None.bmp" - Không phải những gì tôi muốn, tất nhiên. Nhưng, tôi thực sự không muốn hình ảnh được tải từ ổ đĩa cứng. Không phải những hình ảnh này có sẵn như (những gì chúng tôi đã sử dụng để gọi cách đây nhiều năm) 'hình ảnh nội tuyến biên dịch trước' không? – zetar

+0

Có. Xin lỗi một đã giám sát hàng đầu/như ispiro đã nêu. – wonko79

9

Ok ... do đó, đầu tiên bạn cần phải nhập khẩu trong dự án của bạn hình ảnh

1) Chọn picturebox trong Form Design

2) Nhiệm vụ mở PictureBox (đó là mũi tên nhỏ pinted sang phải trên cạnh trên picturebox)

3) Bấm vào nút "Chọn hình ảnh ..."

4) Chọn tùy chọn thứ hai "tập tin tài nguyên dự án:" (tùy chọn này sẽ tạo ra một thư mục có tên "Tài nguyên" mà bạn có thể acces với Properties.Resources)

5) Click vào nhập khẩu và chọn hình ảnh từ máy tính của bạn (bây giờ là một bản sao của hình ảnh với tên giống như hình ảnh sẽ được gửi trong thư mục Resources tạo ở bước 4)

6) Click vào ok

Bây giờ hình ảnh nằm trong dự án của bạn và bạn có thể sử dụng nó bằng lệnh Thuộc tính.Chỉ cần gõ mã này khi bạn muốn thay đổi hình ảnh từ picturebox:

pictureBox1.Image = Properties.Resources.myimage; 

Lưu ý: myimage đại diện cho tên của ảnh ... sau khi nhập các dấu chấm sau Resources, trong lựa chọn của bạn nó sẽ là của bạn tập tin hình ảnh nhập khẩu

1

Câu trả lời được chấp nhận có nhược điểm lớn!
Nếu bạn tải hình ảnh của mình theo cách PictureBox của bạn sẽ khóa hình ảnh, vì vậy nếu bạn cố gắng thực hiện bất kỳ thao tác nào trong tương lai trên hình ảnh đó, bạn sẽ nhận được thông báo lỗi hình ảnh được sử dụng trong một ứng dụng khác!
này article show solution in VB

và Đây là C# thực hiện

FileStream fs = new System.IO.FileStream(@"Images\a.bmp", FileMode.Open, FileAccess.Read); 
    pictureBox1.Image = Image.FromStream(fs); 
    fs.Close(); 
6

Nó phụ thuộc vào đường dẫn tập tin của bạn. Đối với tôi, thư mục hiện tại là [project]\bin\Debug, vì vậy tôi phải di chuyển đến thư mục cha hai lần.

Image image = Image.FromFile(@"..\..\Pictures\"+text+".png"); 
this.pictureBox1.Image = image; 

Để tìm thư mục hiện tại của bạn, bạn có thể làm cho một nhãn giả gọi LABEL2 và viết những dòng này:

this.label2.Text = System.IO.Directory.GetCurrentDirectory(); 
Các vấn đề liên quan