![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранить Metafile [D6, Win2k]
Viktor Kushnir © (2003-08-19 14:40:00)
Создаю MetaFile :TMetaFile
Затем metaFileConvas :TmetaFileCanvas
Заполняю свойства
MetaFile.width := 2000;
MetaFile.height := 1000;
Рисую на TmetaFileCanvas что мне нужно
Удаляю TmetaFileCanvas через metaFileCanvas.free
Сохраняю содержимое MetaFile.SaveToFile
И получаю только левый верхний угл изображения и картинку с разрешением 2ххх на 2ххх точек.
Почему?
Если сдеаль финт ушами и нарисовать содержимое MetaFile на TBitmap (размера 2000х1000) и сохранить уже TBitmap, то все нормально.
{Bitmap.canvas.Draw(0,0metafilecanvas);
Bitmap.savetofile("...");}
Но для больших изображений (10000x5000) этот способ не годится.
Как правильно устанавливать размер MetaFile"a и сохранять его содержимое?
Viktor Kushnir (2003-08-25 09:17:00) [1]
Ага, то есть стоит мне указать не 0, а DC принтера - и все будет ок?
MBo (2003-08-24 13:22:00) [2]
>почему привязка
метафайлы привязаны к конкретному контексту
TMetafileCanvas.Create(MF, 0) означает привязку к десктопу
>получается оно в пикселях в ~3 раза больше чем было заявлено
У меня в пикселах 2003*2008
Viktor Kushnir (2003-08-24 09:08:00) [3]
Все отлично работает, но почему привязка к Screen.PixelsPerInch?
Можно его привязать к другому разрешеннию? К принтеру например?
Да и на выходе сохраняется все избражение, но получается оно в пикселях в ~3 раза больше чем было заявлено. То есть было 2000, стало 6073 например. Это не критично, но хотелось бы знать - почему?
Viktor Kushnir (2003-08-19 19:12:00) [4]
Спасибо щас попробую.
MBo (2003-08-19 17:43:00) [5]
procedure TForm1.Button1Click(Sender: TObject);
var mf:TMetaFile;
mfc:TMetaFileCanvas;
begin
MF := TMetafile.Create;
MF.MMWidth:=2000*2540 div (Screen.PixelsPerInch);
MF.MMHeight:=2000*2540 div (Screen.PixelsPerInch);
with TMetafileCanvas.Create(MF, 0) do
try
Brush.Color := clRed;
Ellipse(0,0,2000,2000);
finally
Free;
end;
MF.SaveToFile("e:\qq.emf");
end;