Вниз
Скачать: 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.011 c
4-77695
Сержик
2002-04-27 12:59
2002.06.24
Как перехватить нажатие кнопки?


3-77258
Stocker !
2002-05-20 10:23
2002.06.24
Как перестроить Query на другой альяс?


6-77533
NeyroSpace
2002-04-15 00:02
2002.06.24
Вопрос для мастеров сетевых технологий: Где взять smbus.h ? ->


3-77294
oss
2002-05-29 11:31
2002.06.24
Invalid Field value


8-77501
DeepProg
2002-02-11 12:21
2002.06.24
Delphi+AutoCAD




   Наверх