是否可以在不保存的情况下调整图像大小并将它们异步加载到图片框中?(Visual Basic)(已解决)

Hui Liu-MSFT 40,866 信誉分 Microsoft 供应商
2024-04-16T07:28:41.5566667+00:00

我需要加载的图片在mb大小中非常大。我正在尝试调整它们的尺寸,以便在将它们加载到图片框中时减少内存使用量(它们不需要质量完美,因为它类似于预览。但是命令 PictureBox1.LoadAsync() 需要图像位置路径。我想调整图像大小并将它们静态加载到图片框中,而无需将它们保存在硬盘驱动器中。这可能吗?

任何关于它的建议或任何进一步的问题\减少内存使用的方法都是值得赞赏的。

(我通过加载图像的缩略图解决了这个问题(从 5-6 个 ram 使用量到 <2)

Note:此问题总结整理于:Is it possible to resize images and asynchronously load them in pictureboxes without saving?(Visual Basic)(Solved)

VB
VB
Microsoft 开发的一种面向对象的编程语言,其在 .NET Framework 上实现。 以前称为 Visual Basic .NET。
59 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 34,506 信誉分 Microsoft 供应商
    2024-04-16T09:38:13.82+00:00

    以下示例是从URL加载图片,然后重置分辨率,最后在图片框中显示其中一张。 以下是您可以参考的代码。

        Private newBitmap As Bitmap  
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load  
            PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage  
        End Sub  
        Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  
            Dim imgLst As List(Of Bitmap) = Await GetImagesFromURL("image url")  
            newBitmap = New Bitmap(imgLst(0))  
            ' Set bitmap resolution  
            newBitmap.SetResolution(50, 50)  
            PictureBox1.Image = newBitmap  
        End Sub  
      
        Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing  
            PictureBox1.Image = Nothing  
            newBitmap.Dispose()  
        End Sub  
        Private Async Function GetImagesFromURL(url As String) As Task(Of List(Of Bitmap))  
            Dim images = New List(Of Bitmap)()  
      
            Using client = New HttpClient()  
                Dim response = Await client.GetAsync(url)  
      
                If response IsNot Nothing AndAlso response.StatusCode = HttpStatusCode.OK Then  
      
                    Using stream = Await response.Content.ReadAsStreamAsync()  
                        Dim memStream = New MemoryStream()  
                        Await stream.CopyToAsync(memStream)  
                        memStream.Position = 0  
                        images.Add(New Bitmap(memStream))  
                    End Using  
                End If  
            End Using  
      
            Return images  
        End Function  
    

    希望对您有所帮助。


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助