SharpDX. Сохранить DeviceContext.Target в Image

305
20 мая 2017, 16:24

Как скопировать содержимое DeviceContext.Target в Image?
Мне необходимо замерить время копирование данных в Image. Затем вызвать функцию WriteFrame с этим Image.
Вот часть кода. Как сделать именно копирование данных? Судя по времени, происходит копирование ссылки, а не данных.

    using d2 = SharpDX.Direct2D1;  
    private List<d2.DeviceContext> dvContext;
    ...
    Stopwatch _stwp = new Stopwatch();
     _stwp.Start();
    // copy to Image
     d2.Image img = dvContext[writeFromContext].Target;
     _stwp.Stop();
    System.Diagnostics.Trace.WriteLine("To Image " +_stwp.ElapsedTicks.ToString());
     _stwp.Restart();
     // save to file
     imageEncoder.WriteFrame(img, bitmapFrameEncode, new wic.ImageParameters(d2PixelFormat, 96, 96, 0, 0, outputImageSize.Width, outputImageSize.Height));
    _stwp.Stop();
    System.Diagnostics.Trace.WriteLine("WriteFrame " + _stwp.ElapsedTicks.ToString());
Answer 1

При приравнивании ссылочных типов, копируется только ссылка. Эт факт. Для копирования всего объекта используется метод: Clone(). Не уверен что конкретно в данном случае он будет работать (не работал с этой библиотекой), но по идее должно выглядеть так:

 d2.Image img = dvContext[writeFromContext].Target.Clone();
READ ALSO
Sqlite - Как записать данные в файл?

Sqlite - Как записать данные в файл?

Как правильно записать данные в файл в форматеhtml ?

344
C# список для хранения произвольных классов

C# список для хранения произвольных классов

Добрый деньВозникла следующая задача

313
Хостинг WCF в исполняемом приложении C#

Хостинг WCF в исполняемом приложении C#

ЗдравствуйтеПытаюсь вынести службу в отдельное приложение

397
Узнать, какой объект находится в фокусе

Узнать, какой объект находится в фокусе

Поясню ситуациюНа форме у меня панель, на панели браузер (cefsharp), а у браузера flash

284