VB .NET 2010:将大位图保存为文件

时间:2016-06-14 11:32:39

标签: vb.net bitmap


我有一个应用程序,它创建一个Bitmap对象,包含所有1600万种颜色。最终的位图将测量 4096×4096 像素 当我尝试调用位图的Save()方法时,会导致错误 这是出现的错误消息:

  

GDI +中发生了一般性错误。

请尽量帮我解决这个问题。 提前致谢!


注意:查看下面源代码的最后几行注释行。我在那里解释了疑问 消息代码:

Public Sub CreateAllColorImage()
    Dim BMP As New Bitmap(4096, 4096) 'This BMP variable is where the image will be created.'
    Dim CurrX = 0
    Dim CurrY = 0
    Dim ExitFors As Boolean = False
    For R = 0 To 255
        For G = 0 To 255
            For B = 0 To 255
                BMP.SetPixel(CurrX, CurrY, Color.FromArgb(R, G, B))
                CurrY += 1 'Increment the Y axis to move to next pixel.'
                If CurrY > 4095 Then CurrX += 1 : CurrY = 0 'Move to next row, or increment X axis, if the last pixel on the Y axis is reached'
                If CurrX > 4095 Then ExitFors = True 'Set the variable to exit the FOR loops if the very last pixel on the whole image is reached.'
                If ExitFors Then Exit For 'Exit the FOR loop if the variable is true.'
            Next
            If ExitFors Then Exit For 'Exit the FOR loop if the variable is true.'
        Next
        If ExitFors Then Exit For 'Exit the FOR loop if the variable is true.'
    Next
    'So therefore, the final image is the BMP variable.'
    'Here, I try to save the Bitmap as a file by calling this:'
    BMP.Save("C:\TEST.BMP")
    'This is when the error occurs. I think so because of the image is too large. If so, is there any way to do anything?'
    'And by the way, I already have the rights to access the C:\ drive because I am working from an Administrator account...'
    BMP.Dispose()
    BMP = Nothing
End Sub

2 个答案:

答案 0 :(得分:3)

作为普通用户,通常无法访问根C:\驱动器。即使您是管理员,除非另有说明,否则您的应用程序将以正常权限运行。

不幸的是,GDI +隐藏了大多数例外,所以很难知道发生了什么事的确切原因,但我的猜测是你的问题是因为你的应用程序不允许直接保存在C:\驱动器中。

尝试将图像保存在您保证有权访问的路径中,例如C:\Users\YourUserName\Desktop

答案 1 :(得分:1)

可能是许可问题。要测试它,请找到已编译的.exe并以管理员身份运行它。如果它有效,你知道这是一个权限问题。

如果您因为不知道用户名而尝试将其保存到C:驱动器,则可以使用SpecialDirectory

e.g。

My.Computer.FileSystem.SpecialDirectories.MyDocuments

将允许您将其保存在用户的文档文件夹中。通常,保存到C:驱动器不是最好的选择。

我还建议使用其他构造函数,您可以在其中指定图像格式。

e.g。

bitmapToSave.Save(saveLocation, Imaging.ImageFormat.Bmp)