Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.24;
Скачать: CL | DM;

Вниз

Как   Найти похожие ветки 

 
Людмила   (2002-02-12 17:56) [0]

Я рисую на канве метафайла картинки, которые заведемо полностью туда не влезают. Т.е. при рисовании некоторые части рисунка имеют отрицательные координаты. Но в отличие от Bitmap при выводе этого метафайла на принтер или экран отображается все нарисованное, даже то, что в канву не должно было влезть. Как мне "обрезать" ненужные части?


 
Лёша ©   (2002-02-13 06:10) [1]

Не надо обрезать. Возьмите другую программу просмотра и печати метафайла. Большенство из них выводят метафайл в (0,0).
Если же метафайлы надо сохранять и "обрезанные" части не нужны, тогда лучше сразу, ещё при рисовании на метафайле битмапов, отсекать лишнее.
With TMetafileCanvas.Create(MyMetafile,0) do
begin
//Dest-на канве, Source-на битмапе
if Dest.Left<0 then
begin
Source.Left:= Source.Left-Dest.Left;
Dest.Left:=0;
end;
if Dest.Top<0 then
begin
Source.Top:= Source.Top-Dest.Top;
Dest.Top:=0;
end;
CopyRect(Dest, BMP.Canvas, Source);
Free;
end;


 
Людмила   (2002-02-13 13:10) [2]

Спасибо за участие, но в том-то и проблема, что мне BMP использовать вообще нельзя, он слишком много ресурсов жрет. Я рисую на канве метафайла, а потом этот метафайл печатаю или отображаю на форме в некоторой области (Draw или StretchDraw на канве принтера или формы). Вот тогда-то и вылезают все эти части, которые в метафайле были отрицательные и не должны были напечататься. Это никак не связано с DC, то биш Device Context?


 
troits ©   (2002-02-13 16:47) [3]

В SDK написано, что при PlayEnhancedMetaFile Clip Region надо указывать для DC самостоятельно.

Так что можно поробовать что-то вроде этого:

procedure TForm1.FormPaint(Sender: TObject);
var
wRgn: HRGN;
begin
wRgn := CreateRectRgn(0, 0, FMetaFile.Width, FMetaFile.Height);
SelectClipRgn(Canvas.Handle, wRgn);
Canvas.Draw(0, 0, FMetaFile);
SelectClipRgn(Canvas.Handle, 0);
DeleteObject(wRgn);
end;



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

Текущий архив: 2002.06.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
3-77288
Blondin
2002-05-30 18:46
2002.06.24
Проблемы с АДО, помогите


7-77646
skovorodka
2002-03-31 14:38
2002.06.24
Как изменить время часов виндовс ?


1-77471
ASV2
2002-06-11 20:51
2002.06.24
Изменение parent


8-77512
serjant
2002-01-31 10:15
2002.06.24
Как встроить Flash-клип в Delphi


14-77596
Sergik_81
2002-05-22 07:06
2002.06.24
Вопрос на засыпку...