在UWP中如何将JPEG数据转换为图像?附相关代码解析
在UWP应用中将JPEG数据转换为图像的正确实现
先帮你梳理下现有代码里的几个关键问题,这些问题会直接导致功能无法正常工作:
- 条件判断逻辑倒置:你在
textBox2.Text为空时才执行Base64转换,这时候调用Convert.FromBase64String必然抛出异常,应该判断文本非空时才处理 - 循环赋值覆盖:
foreach里每次把item赋值给textBox2.Text,最终textBox2只会保留最后一个PictureNo的值,丢失了其他节点数据 - 无效的空值转换:用空文本生成Base64再拼接成data URI,完全无法生成有效的图像源
下面是修正后的完整实现方案,包含正确的XML解析、Base64转换和图像赋值逻辑:
// 解析XML获取PictureNo节点的Base64值 XDocument xdoc = XDocument.Parse(rr.Nodes[1].ToString(), LoadOptions.None); xdoc.Declaration = new XDeclaration("1.0", "UTF-8", "yes"); // 获取所有PictureNo节点的值(按需选择第一个或处理全部) var pictureNoValues = xdoc.Descendants("PictureNo").Select(b => b.Value).ToList(); // 取第一个非空的Base64值来转换 string targetBase64 = pictureNoValues.FirstOrDefault(v => !string.IsNullOrEmpty(v)); if (!string.IsNullOrEmpty(targetBase64)) { try { // 将Base64字符串转为JPEG字节数组 byte[] jpegBytes = Convert.FromBase64String(targetBase64); // 把字节数组转为UWP可识别的BitmapImage using (var stream = new InMemoryRandomAccessStream()) { await stream.WriteAsync(jpegBytes.AsBuffer()); stream.Seek(0); BitmapImage bitmap = new BitmapImage(); await bitmap.SetSourceAsync(stream); // 赋值给Image控件的Source image.Source = bitmap; } } catch (FormatException ex) { // 处理Base64格式错误 Debug.WriteLine($"Base64格式异常: {ex.Message}"); } catch (Exception ex) { // 处理其他转换异常 Debug.WriteLine($"图像转换失败: {ex.Message}"); } } else { // 无有效数据时的处理(比如设默认图或清空) image.Source = null; }
关键细节说明:
- XML解析优化:用
FirstOrDefault获取第一个有效数据,避免循环覆盖文本框;如果需要处理多图,可以遍历pictureNoValues逐个转换 - 可靠的图像转换:UWP中推荐用
BitmapImage配合InMemoryRandomAccessStream处理字节流图像,比直接拼接data URI更稳定,尤其适合大尺寸图像 - 异常防护:添加格式异常和通用异常捕获,避免程序崩溃,同时方便调试定位问题
内容的提问来源于stack exchange,提问作者Bulent Erim
相关产品推荐
相关产品推荐

