Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранить 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо