Re: WinApi PlayMetaFile тормознутость
От: goto Россия  
Дата: 12.06.12 14:07
Оценка: :)
Здравствуйте, Alexoid1, Вы писали:

A>Здравствуйте, программисты!!!

A>Интересная штука прояснилась, читаю функцией GetMetaFile WMF-файл и функцией PlayMetaFile вывожу на HBITMAP hBmp (Монохромный, размером 5000х5000, режим MM_ISOTROPIC) ч/з HDC hDCMem, при этом при отладки посмотрел, большую част времени занимает вывод, т.е. ф-я PlayMetaFile.

Битмап большой и, насколько я понимаю, не-compatible. Вывод в DC производится программно, без аппаратного ускорения. Скорее всего, это и есть причина тормозов.

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

A>У меня на сложившуюся ситуацию приходит только одно решение писать собственный декодер WMF файлов и выполнять комманды записанные в фаилах сразу на HBITMAP`е.
A>Может есть дугой вариант расвити событий в сложившейся ситуации, подскажите как быть.

Надо понять задачу. Может, потребуется что-то придумывать, эксперименты. Если битмап 1-битный, то даже не знаю, какой библиотекой его можно рендерить _очень_быстро_.

A>-----------

A>Заранее спасибо за помощь.

Увы, не за что.
WinApi PlayMetaFile тормознутость
От: Alexoid1 Россия  
Дата: 05.06.12 07:25
Оценка:
Здравствуйте, программисты!!!
Интересная штука прояснилась, читаю функцией GetMetaFile WMF-файл и функцией PlayMetaFile вывожу на HBITMAP hBmp (Монохромный, размером 5000х5000, режим MM_ISOTROPIC) ч/з HDC hDCMem, при этом при отладки посмотрел, большую част времени занимает вывод, т.е. ф-я PlayMetaFile.
Мне постоянно необходимо считывать в оперативку по три WMF-файла (при открытии заказа),и в общей сложности на то чтобы поместить файл в память у меня уходит 15 сек.
У меня на сложившуюся ситуацию приходит только одно решение писать собственный декодер WMF файлов и выполнять комманды записанные в фаилах сразу на HBITMAP`е.
Может есть дугой вариант расвити событий в сложившейся ситуации, подскажите как быть.
-----------
Заранее спасибо за помощь.
Re: WinApi PlayMetaFile тормознутость
От: Alexoid1 Россия  
Дата: 05.06.12 07:30
Оценка:
Забыл код вставить:


        if(i==1)
            pHeadMetaArr=(LPMETAARR)malloc(sizeof(tagMETAARR));
        else
            pHeadMetaArr=(LPMETAARR)realloc(pHeadMetaArr,sizeof(tagMETAARR)*i);
        _tcscpy_s(pszTmp,MAX_PATH,pszPath);
        _itot_s(i,pszTmp1,100,10);
        _tcscat_s(pszTmp,MAX_PATH,pszTmp1);
        _tcscat_s(pszTmp,MAX_PATH,_T("_"));
        _tcscat_s(pszTmp,MAX_PATH,pszProjOldID);
        _tcscat_s(pszTmp,MAX_PATH,_T(".wmf"));
        pHeadMetaArr[i-1].rSize.top=0;
        pHeadMetaArr[i-1].rSize.left=0;
        pHeadMetaArr[i-1].rSize.right=5000;
        pHeadMetaArr[i-1].rSize.bottom=5000; 
        pHeadMetaArr[i-1].i=i;
        HDC hDCTmp = CreateCompatibleDC (GetDC()->m_hDC);
        HBITMAP hBmpTmp = CreateBitmap(pHeadMetaArr[i-1].rSize.right,pHeadMetaArr[i-1].rSize.bottom,1,1,NULL);
        HBITMAP hBmpTmpOld = (HBITMAP)SelectObject(hDCTmp, hBmpTmp);
        SetMapMode(hDCTmp,MM_ISOTROPIC);
        SetWindowExtEx(hDCTmp,1,1, NULL);                            
        SetViewportExtEx(hDCTmp, pHeadMetaArr[i-1].rSize.right-50, pHeadMetaArr[i-1].rSize.right-50,NULL);    
        FillRect(hDCTmp,&pHeadMetaArr[i-1].rSize,0);      
        hmf=GetMetaFile(pszTmp);
        PlayMetaFile(hDCTmp,hmf);
Re[2]: WinApi PlayMetaFile тормознутость
От: Alexoid1 Россия  
Дата: 13.06.12 10:30
Оценка:
Здравствуйте, goto, Вы писали:

G>Надо понять задачу. Может, потребуется что-то придумывать, эксперименты. Если битмап 1-битный, то даже не знаю, какой библиотекой его можно рендерить _очень_быстро_.


Задача простая — создать предварительный просмотр заказа с участием WMF-файлов, и плюс к этому некоторую информацию вывести из Базы данных.
В итоге я поэксперементировал на разных машинах в том числе и на одноядерном celerone и окозалось что он намного быстрее справляется с этой задачей (3 WMF-файла за пару сек.) и я рещил с многоядерными процами решить задачю многопоточностью, конечно не всё так безоблачно, но хотя-бы оператор пока загружаются 2-е остальных картинки — просмотреть первую.
Если моя программа внедрится в производство я напишу на чтение WMF-чтение формата собственный декодер, темпаче в инэте есть инфа как этот формат устроен, надеюсь это ускорит чтение и вывод на растр в памяти этой БАЙДЫ, а так пока я и этим что получилось доволен.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.