是否有一个从Image对象获取文件名的函数

问题描述 投票:0回答:1

我正在使用Movie Maker Library时间轴SDK控件6.0 dll要添加照片,您需要STRING的文件名。到目前为止一切都很好但是我想插入一个获取图像对象的函数但是该库没有使用电缆连接IMAGE对象的功能我需要从IMAGE对象中获取文件名也就是说:字符串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);
            }
c# windows-forms-designer
1个回答
0
投票

您在这里有一个“ XY问题”,您问的是错误的问题。您的axTimelineControl1需要图像的文件名。这意味着它期望使用该文件名将图像保存到磁盘。

但是您所拥有的只是一个远程图像,位于某些URL后面。 client.OpenRead(url)将图像下载到Stream中,但是您不能直接对其进行任何操作。

因此,您不想拍摄该图像并将其放入WinForms Image对象中。相反,您想使用文件名将该图像保存到磁盘,然后将该文件名赋予axTimelineControl1

您可以选择几种方法:

1]您可以从Stream中获得client.OpenRead(),将其转换为FileStream并将其保存到磁盘。2)您可以使用WebClient将图像直接下载到磁盘,然后将图像的文件名赋予axTimelineControl1

让我们做2)。它将节省一些步骤。

首先,创建文件。

string fileName = System.IO.Path.GetTempFileName();
System.IO.File.Create(fileName).Close();

我们正在此处创建“临时”文件-这些文件应视为一次性文件。请注意,Windows不会为您清理它们,因此一旦完成使用,程序应将其删除。 System.IO.File.Create()给了我们一个FileStream对象,但是我们不需要它,所以我们立即将其Close()了,这样WebClient就可以写入我们的文件了。

接下来,我们下载图像,并告诉WebClient将其保存到我们新创建的Temp文件中:

// 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);

不要忘记清理您的临时文件!

© www.soinside.com 2019 - 2024. All rights reserved.