Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 获取System.Drawing.Bitmap的文件路径_Vb.net - Fatal编程技术网

Vb.net 获取System.Drawing.Bitmap的文件路径

Vb.net 获取System.Drawing.Bitmap的文件路径,vb.net,Vb.net,是否有方法获取系统.Drawing.Bitmap类型的文件路径? 比如: My.Resources.myImg.GetFilePath或 GetFilePath(My.Resources.myImg) 显然,我上面的例子并不存在。我只是想表明我的意图。我不太确定这些资源是否有路径,我认为它们是嵌入到应用程序中,然后读入内存的(不过我可能错了) 如果你想让它们有一个路径,你必须将它们保存到一个文件中。这将图像保存在本地应用程序数据文件夹中: Dim MyImgPath As String = IO

是否有方法获取
系统.Drawing.Bitmap
类型的文件路径?

比如:

My.Resources.myImg.GetFilePath

GetFilePath(My.Resources.myImg)


显然,我上面的例子并不存在。我只是想表明我的意图。

我不太确定这些资源是否有路径,我认为它们是嵌入到应用程序中,然后读入内存的(不过我可能错了)

如果你想让它们有一个路径,你必须将它们保存到一个文件中。这将图像保存在本地应用程序数据文件夹中:

Dim MyImgPath As String = IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "myImg.bmp")
My.Resources.myImg.Save(MyImgPath, Imaging.ImageFormat.Bmp)
如果要将图像保存在与应用程序相同的文件夹中:

Dim MyImgPath As String = IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory(), "myImg.bmp")

您可能希望创建自己的对象:

Public Class MyBitmap 
Inherits Bitmap 

Private _FilePath As String 
'------------------------'

Public Property FilePath as String 
Get 
Return _FilePath
End Get 

' etc... 

您可以设置路径并在以后从属性中获取它,这是不可能的,因为有很多方法可以初始化System.Drawing.Bitmap(例如:流、Uri、另一个图像对象),而此位图是一个非常通用的对象

根据您使用的技术,可能有一种更专门的图像类型更适合使用。例如,如果您使用的是WPF,请检查BitmapImage,它将文件路径存储为属性URI源

如果您确实需要使用System.Drawing.Bitmaps,我建议您创建一个包含位图和文件路径的模型。像这样:

{
    public Bitmap MyImage {get; set; }
    public string FilePath {get; set; }
}

实际上,我的
Resources
文件夹中确实有这个文件,可以对它进行硬编码。这正是我想要避免的。问题是我正在使用其他人的函数,该函数需要一个字符串。@克里斯:编译应用程序后,
myproject\Resources
文件夹将不存在。据我所知,您需要将资源写入文件。请尝试仅取出.exe并在另一台计算机上运行。您将仍然拥有这些图像,尽管您没有使用它复制任何图像。编译应用程序后,您的
资源
文件夹将不再重要,因此,为了从映像获取文件路径,请在每次需要时保存它。我已将资源设置为复制到输出目录。我知道这不是最好的方法,但我正在使用的现有代码库中有一些函数我不想去碰,它们将字符串作为图像路径的参数。现在,他们有它依赖于网络资源。我只是在尝试创建一个本地回退,它比一个服务器上的文件更可靠一点network@Chris:如果将资源设置为“复制到输出目录”,那么为什么将其作为资源?使用或,否则您将有一个嵌入的图像和一个保存在磁盘上的图像。为了简单地移动你的应用程序,我建议将图像作为普通资源(
My.Resources
)使用,然后在需要时将其写入磁盘(如上所示)。但这对资源来说是不行的。此外,您不需要将
Private\u FilePath作为字符串
,您只需要这一行:
Public Property FilePath作为字符串
。这一点您可能是对的,但我认为最好将变量本身包含在类中,也一样。除非在设置/获取时使用只读属性或自定义操作,否则实际上没有多大区别,否则它们都是相同的。如果没有变量,编译器会为您创建变量。:)是的,但我在学校的Java中就是这样学的,并从中养成了习惯。你知道,旧习惯很难改变。一般来说,位图是内存中的一个对象。它可能没有从文件中读取,因此不一定有文件路径。