Есть ли функция, которая берет имя файла из объекта изображения - PullRequest
0 голосов
/ 01 апреля 2020

Я использую Mov ie Maker Library Timeline SDK Control 6.0 dll. И чтобы добавить фотографию, вам нужна СТРОКА из имени файла. Пока все в порядке. Но я хочу вставить функцию, которая получает объект IMAGE. Но в библиотеке нет функции, которая соединяет объект IMAGE. Мне нужно получить имя файла из объекта IMAGE. То есть: string fileName = изображение

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

1 Ответ

0 голосов
/ 01 апреля 2020

У вас есть небольшая проблема "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();

Мы создаем здесь файл «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);
}

Теперь у нас есть изображение на диске, и мы можем сообщить Mov ie 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);

Не забудьте очистить свой темп файл!

...