我当前正在处理Windows Store应用程序,我必须在其中拍摄图片,然后将其保存在本地,然后将其称为同步时,将其发送到一个服务,该服务将保存图片服务器。
我在复制这些图片时遇到了问题。我要做的是以下内容:
-
获取指定文件夹中所有图像的列表,然后将其
中buffer.toarray
提取到bitearray
Dim fileList As IReadOnlyList(Of StorageFile) = Await folder.GetFilesAsync() For Each file As StorageFile In fileList Dim Buffer As IBuffer = Await Windows.Storage.FileIO.ReadBufferAsync(file) fileBytes = Buffer.ToArray() lstfileBytes.Add(fileBytes) Next file
-
我然后将其发送到我的VB.NET服务,该服务将图像保存到使用
创建的文件stream.copyto()
For i = 0 To lstMemoryPicturesReservoir.Count - 1 Dim fs As FileStream = New FileStream("\SERVERDataname.jpg", FileMode.Create) Dim memory As Stream = New MemoryStream(lstMemoryPicturesReservoir(i)) memory.position = 0 memory.CopyTo(fs) Next
此代码对我有用,除非图片大小到达特定点。我注意到,当我的ByteArray
的lenght
围绕 4000或更低图片未正确复制。当我在 Windows Photo Viewer 中打开它时,我会收到以下错误:
Windows照片查看器无法显示此图片,因为文件是 空
对可能导致此问题或如何解决该问题的任何想法?
尝试将两个流放入Using
块中:
For i = 0 To lstMemoryPicturesReservoir.Count - 1
Using fs As FileStream = New FileStream("\SERVERDataname.jpg", FileMode.Create)
Using memory As Stream = New MemoryStream(lstMemoryPicturesReservoir(i))
memory.position = 0
memory.CopyTo(fs)
End Using
End Using
Next
Using
块应在任何地方使用:
- 创建实现
IDisposable
接口的类的对象, - 您在同一范围内使用该对象开始并完成结束
Using
确保即使抛出异常,也可以调用IDisposable
接口的Dispose
方法。
在这种情况下,Dispose
方法将确保所有缓冲区在关闭流之前都被冲洗。我怀疑最后4000个字节没有被冲洗。实际上,我怀疑您最终会注意到大于4000个字节的图像的奇怪问题 - 其中一些会缺少最终的缓冲区。没有足够的数据来防止它们显示,但至少可以说它们看起来很奇怪。