是否有从 Image 对象获取文件名的函数
Is there a function that takes a filename from the Image object
我正在使用 Movie Maker Library Timeline SDK Control 6.0 dll
要添加照片,您需要一个文件名字符串。到目前为止一切都很好
但是我想插入一个获取图像对象的函数
但是该库没有连接 IMAGE 对象的功能
我需要的是从图像对象中获取文件名
即:string fileName = image
Image img = default;
using (WebClient client = new WebClient())
{
string url = textBox1.Text;
Stream stream = client.OpenRead(url);
img = Image.FromStream(stream);
axTimelineControl1.AddImageClip(trackIndex: 1, fileName :img.ToString(),
clipStartTime: axTimelineControl1.GetMediaDuration(img.ToString()), clipStopTime: 4);
}
你有点 "XY problem" -- 你问错了问题。您的 axTimelineControl1
需要图像的文件名。这意味着它 也 期望有一个图像以该文件名保存到磁盘。
但是您所拥有的只是一个远程图像,在一些 URL 后面。 client.OpenRead(url)
将图像下载到 Stream
,但您不能直接对其进行任何操作。
因此,您不想拍摄该图像并将其放入 WinForms Image
对象中。相反,您想使用文件名将该图像保存到磁盘,然后将该文件名提供给您的 axTimelineControl1
.
您有几种选择:
1) 你可以把从 client.OpenRead()
得到的 Stream
变成 FileStream
并保存到磁盘。
2) 你可以使用 WebClient
将图片直接下载到磁盘,然后将图片的文件名指定给 axTimelineControl1
.
让我们改为执行 2)。它将节省一些步骤。
首先,创建文件。
string fileName = System.IO.Path.GetTempFileName();
System.IO.File.Create(fileName).Close();
我们正在此处创建一个 "Temp" 文件——这些文件将被视为一次性文件。请注意 Windows 不会为您清理它们,因此一旦您完成了它,您的程序应该将其删除。 System.IO.File.Create()
给了我们一个 FileStream
对象,但我们不需要它,所以我们马上 Close()
它,这样 WebClient
就可以写入我们的文件.
接下来,我们下载图像,并告诉 WebClient
将其保存到我们新创建的临时文件中:
// Defining my own URL here. Feel free to substitute your own.
string url = "https://derpicdn.net/img/view/2018/5/18/1735426.jpeg";
using (var client = new WebClient())
{
client.DownloadFile(url, fileName);
}
现在我们在磁盘上有一个图像,我们可以告诉 Movie Maker SDK 控件在哪里可以找到它:
float duration = axTimelineControl1.GetMediaDuration(fileName);
axTimelineControl1.AddImageClip(
trackIndex: 1,
fileName: fileName,
clipStartTime: duration,
clipStopTime: 4);
这样就可以了。
整个代码清单:
string fileName = System.IO.Path.GetTempFileName();
System.IO.File.Create(fileName).Close();
// Defining my own URL here. Feel free to substitute your own.
string url = "https://derpicdn.net/img/view/2018/5/18/1735426.jpeg";
using (var client = new WebClient())
{
client.DownloadFile(url, fileName);
}
float duration = axTimelineControl1.GetMediaDuration(fileName);
axTimelineControl1.AddImageClip(
trackIndex: 1,
fileName: fileName,
clipStartTime: duration,
clipStopTime: 4);
别忘了清理临时文件!
我正在使用 Movie Maker Library Timeline SDK Control 6.0 dll 要添加照片,您需要一个文件名字符串。到目前为止一切都很好 但是我想插入一个获取图像对象的函数 但是该库没有连接 IMAGE 对象的功能 我需要的是从图像对象中获取文件名 即:string fileName = image
Image img = default;
using (WebClient client = new WebClient())
{
string url = textBox1.Text;
Stream stream = client.OpenRead(url);
img = Image.FromStream(stream);
axTimelineControl1.AddImageClip(trackIndex: 1, fileName :img.ToString(),
clipStartTime: axTimelineControl1.GetMediaDuration(img.ToString()), clipStopTime: 4);
}
你有点 "XY problem" -- 你问错了问题。您的 axTimelineControl1
需要图像的文件名。这意味着它 也 期望有一个图像以该文件名保存到磁盘。
但是您所拥有的只是一个远程图像,在一些 URL 后面。 client.OpenRead(url)
将图像下载到 Stream
,但您不能直接对其进行任何操作。
因此,您不想拍摄该图像并将其放入 WinForms Image
对象中。相反,您想使用文件名将该图像保存到磁盘,然后将该文件名提供给您的 axTimelineControl1
.
您有几种选择:
1) 你可以把从 client.OpenRead()
得到的 Stream
变成 FileStream
并保存到磁盘。
2) 你可以使用 WebClient
将图片直接下载到磁盘,然后将图片的文件名指定给 axTimelineControl1
.
让我们改为执行 2)。它将节省一些步骤。
首先,创建文件。
string fileName = System.IO.Path.GetTempFileName();
System.IO.File.Create(fileName).Close();
我们正在此处创建一个 "Temp" 文件——这些文件将被视为一次性文件。请注意 Windows 不会为您清理它们,因此一旦您完成了它,您的程序应该将其删除。 System.IO.File.Create()
给了我们一个 FileStream
对象,但我们不需要它,所以我们马上 Close()
它,这样 WebClient
就可以写入我们的文件.
接下来,我们下载图像,并告诉 WebClient
将其保存到我们新创建的临时文件中:
// Defining my own URL here. Feel free to substitute your own.
string url = "https://derpicdn.net/img/view/2018/5/18/1735426.jpeg";
using (var client = new WebClient())
{
client.DownloadFile(url, fileName);
}
现在我们在磁盘上有一个图像,我们可以告诉 Movie Maker SDK 控件在哪里可以找到它:
float duration = axTimelineControl1.GetMediaDuration(fileName);
axTimelineControl1.AddImageClip(
trackIndex: 1,
fileName: fileName,
clipStartTime: duration,
clipStopTime: 4);
这样就可以了。
整个代码清单:
string fileName = System.IO.Path.GetTempFileName();
System.IO.File.Create(fileName).Close();
// Defining my own URL here. Feel free to substitute your own.
string url = "https://derpicdn.net/img/view/2018/5/18/1735426.jpeg";
using (var client = new WebClient())
{
client.DownloadFile(url, fileName);
}
float duration = axTimelineControl1.GetMediaDuration(fileName);
axTimelineControl1.AddImageClip(
trackIndex: 1,
fileName: fileName,
clipStartTime: duration,
clipStopTime: 4);
别忘了清理临时文件!