Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.027 c
8-77507
Grimlen
2002-02-08 09:26
2002.06.24
Помогите чайнику!


1-77487
Cranium
2002-06-10 19:18
2002.06.24
Визуальные компаненты?


4-77702
Falcon
2002-04-23 15:17
2002.06.24
Как вытащить имена Items (caption) из окна


1-77329
Windeus
2002-06-09 12:55
2002.06.24
multilevel edit


3-77299
Kombat
2002-05-30 13:39
2002.06.24
Большие базы в InterBase/FireBird




   Наверх