Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2011, 12:29   #1
jetyb
Пользователь
 
Регистрация: 09.11.2010
Сообщений: 22
По умолчанию Наложение спрайтов на видео (DirectShow)

Доброго времени суток!

Мне надо наложить

Помогите оптимизировать программу. Я накладываю спрайты на видео.
Картинки для спрайтов программно создаются на каждом шаге видео.

Я написал тестовую программу :

Код:
public int CompositeImage(IntPtr pD3DDevice, IntPtr pddsRenderTarget, AMMediaType pmtRenderTarget, long rtStart,
                                  long rtEnd, int dwClrBkGnd, VMR9VideoStreamInfo[] pVideoStreamInfo, int cStreams)
{
...


int wid = 80;           // ширина картинки
int hei = 80;           // высота картинки 
int iteration = 10;    // количество спрайтов


Bitmap[] bmp1 = new Bitmap[iteration];
Graphics[] g = new Graphics[iteration];
MemoryStream[] stream = new MemoryStream[iteration];

for (int i = 0; i < iteration; i++)
{
      bmp1[i] = new Bitmap(wid, hei, PixelFormat.Format32bppRgb);
      g[i] = Graphics.FromImage(bmp1[i]);
      stream[i] = new MemoryStream();
}

for(int i=0;i<iteration;i++)
{
//рисование с помощью Graphics на Bitmap-ах
}

//Сохранение картинок в поток
for (int i = 0; i < iteration; i++)
 {
     bmp1[i].Save(stream[i], ImageFormat.Bmp);
     stream[i].Position = 0;
}

//Создание спрайтов из потока
for (int i = 0; i < iteration; i++)
{  
     Sprite sprite = new Sprite((device));
     Texture texture = TextureLoader.FromStream(stream[i]    .......
     sprite.Begin(SpriteFlags.AlphaBlend | SpriteFlags.DoNotSaveState);
     sprite.Draw2D(texture, new Rectangle(0, 0, wid, hei),
                         new Rectangle(0, 0, wid, hei),
                         new Point(100,200),
                         Color.Red);
      sprite.Flush();
      sprite.End();
}
...
}
В ней на видео накладываются картинки (их число iteration) размерами wid на hei.

Программа работает, но при тестировании я заметил, что изменение
количества картинок существенней влияет на производительность чем такое же увеличение их площади.
(К примеру, при увеличенных в 3 раза wid и hei программа работает быстрее чем при увеличенном в 5 раз iteration)

Мне казалось, что производительность должна зависеть только от суммарной площади создаваемых картинок(не считая малостей).

Как можно оптимизировать мой код?



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 27.07.2011 в 12:31.
jetyb вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как рисовать поверх видео DirectShow ???? FarStar Visual C++ 7 17.06.2011 12:57
directshow видео из потока Ser-V Общие вопросы C/C++ 0 27.10.2010 22:12
DirectShow, вытащить скрины видео AleD Мультимедиа в Delphi 0 25.07.2010 07:16
Наложение ВИДЕО vev1979 Софт 1 08.01.2010 12:55
Массив спрайтов Dj_smart Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 17.05.2008 21:26