从Zip压缩包读取PNG图片并显示到PictureBox的实现问题
从Zip压缩包读取Bitmap并显示到PictureBox
直接基于你现有逻辑修改,核心是把StreamReader读取文本的逻辑换成Bitmap从流加载的逻辑,同时注意资源的正确释放:
using System.Text; using System.IO.Compression; using System.Windows.Forms; using System.Drawing; public partial class Form1 : Form { private void Form1_Load(object sender, EventArgs e) { string zipFileFullPath = "C:\\Tester\\adv.jar"; // 替换成你的图片文件名,比如"pack.png" string targetImageName = "pack.png"; using (var zipArchive = ZipFile.OpenRead(zipFileFullPath)) { // 查找目标图片条目 var imageEntry = zipArchive.Entries .FirstOrDefault(x => x.Name.Equals(targetImageName, StringComparison.InvariantCulture)); if (imageEntry != null) { // 打开图片流并加载Bitmap using (var imageStream = imageEntry.Open()) { // 从流创建Bitmap,克隆副本避免流关闭后Bitmap失效 Bitmap bitmap = new Bitmap(imageStream); pictureBox1.Image = (Bitmap)bitmap.Clone(); } } } } // Form关闭时释放Bitmap资源,防止内存泄漏 protected override void OnFormClosed(FormClosedEventArgs e) { base.OnFormClosed(e); pictureBox1.Image?.Dispose(); } }
关键注意点:
- 资源释放:用
using包裹ZipArchive和图片流,确保用完后自动释放资源;Form关闭时手动释放PictureBox的Image,避免内存泄漏。 - 空引用判断:必须检查
imageEntry是否为null,防止找不到图片时抛出空引用异常。 - Bitmap克隆:
Bitmap基于流创建时,流关闭后原始Bitmap会失效,因此用Clone()创建独立副本赋值给PictureBox。
内容的提问来源于stack exchange,提问作者Caleb Starks
相关产品推荐
相关产品推荐

