Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];

Вниз

Отрисовка метафайла и ClipRegion   Найти похожие ветки 

 
nsv   (2002-06-11 15:37) [0]

Кто-нибудь отрисовывал Метафайл через PlayEnhMetafile на HDC,
для которой перед этим выбран непрямоугольный ClipRegion.
Упрощенный пример ниже.

var
R:rect;
wmff:TMetafile;
dstrgn,oldrgn:HRGN;
bmp:tbitmap;
pp:array of tpoint;

....

bmp:=tbitmap.create; bmp.pixelformat:=pf24bit;
bmp.width:=form1.Clientwidth; bmp.height:=form1.ClientHeight;
oldrgn:=CreateRectRgn(0,0,bmp.width,bmp.height);
dstrgn:=CreatePolygonRgn(Ppoint(pp)^,5,ALTERNATE);
selectObject(bmp.canvas.Handle,dstrgn);
PlayEnhMetaFile(bmp.canvas.Handle,wmff.Handle, R);
selectObject(bmp.canvas.Handle,oldrgn);
deleteobject(dstrgn);
...
bmp.free;
deleteobject(oldrgn);


Что-то быстро съедаются GDI ресурсы. Есть ли выход?
С прямоугольной облаcтью все нормально.

Нужен вывод метафайла именно в непрямоугольную область.

Если делать операцию BitBlt с любым типом ClipRegion то
все нормально.


 
int64   (2002-06-11 17:10) [1]

Имхо, у тебя регионы не "очищаются".


 
nsv   (2002-06-11 18:03) [2]

А как регионы очищать. Я ведь после отрисовки их удаляю.
А других функций очистки что-то не нашел.

Эта проблема у меня неожидано возникла только при отрисовке
метафайла.


 
int64   (2002-06-11 18:33) [3]

У меня были такие глюки, когда заюзанные регионы deleteobject не удалялись (D5, Win95/98). И когда их собиралось очень много, шли глюки. Не знаю, чьи это проблемы 9* или D5, но под ХР/Д6 проблем таких нет.

Я вместе с deleteobject, ещё писал rgn:= 0;
Всё работало.


 
nsv   (2002-06-11 20:57) [4]

К сожалению
dstrgn:=0 и oldrgn:=0 ,которые вставил после DeleteObject
не помогли.
Кстати у меня D5/win98.


 
int64   (2002-06-11 22:58) [5]

Дело может и не в регионах. Хотя, по видимому, больше невчем.
Я тогда не разобрался в чём была проблема, потому что вообще отказался от регионов.

Вот откопал из истории проекта функцию:

procedure TGraphPage.EnabledClipRgn(ARect: TRect; M_OR_RBM: boolean = True);
begin
try
if M_OR_RBM then
begin
DeleteObject(RgnM);
RgnM:=0;
RgnM := CreateRectRgnInDiRect(ARect);
SelectClipRgn(Matrix.Canvas.Handle, RgnM);
end else
begin
DeleteObject(RgnRBM);
RgnRBM:=0;
RgnRBM := CreateRectRgnInDiRect(ARect);
SelectClipRgn(ReDrawBitmap.Canvas.Handle, RgnRBM);
end
except
DemoMessage("EnabledClipRgn error!")
end;
end;


Эта функция вызывалась на OnMouseMove и глюки возникали где-то с 16000 вызова. Так вот, точно помню, что остановил эти глюки только присваивяя регионам 0.

Ты лучше локализуй ошибку: из-за регионов ли она.


 
nsv   (2002-06-12 15:28) [6]

Проблема поедания ресурсов возникает именно при сочетании функции PlayEnhMetaFile
и
selectObject(bmp.canvas.Handle,dstrgn);

Как только убираю selectObject(bmp.canvas.Handle,dstrgn), то
все впорядке.

У меня проблема другого рода, чем в твоем примере. Так как
пара десятков моих отрисовок съедают 1% GDI ресурса.

Если ответов не будет, единственный выход написать на VC++, чтобы определить в чем проблема : в W98 или в D5, так как D6
у меня нет.




Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
1-45347
Kolya
2002-10-02 02:28
2002.10.14
Array


1-45288
Keplin Sergey
2002-10-04 14:02
2002.10.14
Как в цикле прогнать все компоненты приложения?


1-45263
Осирис
2002-10-03 14:46
2002.10.14
TaskBar


8-45470
nsv
2002-06-11 15:37
2002.10.14
Отрисовка метафайла и ClipRegion


1-45341
nikolab6
2002-10-05 19:07
2002.10.14
TreeView/TreeNode Color.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский