Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Вниз

Рисование растра в метафайл   Найти похожие ветки 

 
pasha_golub ©   (2006-01-24 18:30) [0]

Здравствуйте.

Есть код:

procedure DrawC(ACanvas: TCanvas; Ax,Ay,Aw,Ah: integer; AGraphic: TGraphic);
var Emf1: TMetafile;
   Emf1_Canvas: TMetaFileCanvas;
   a: integer;
begin
If ACanvas is TMetafileCanvas then
 begin
  Emf1 := TMetaFile.Create;
  Emf1.Enhanced := True;
  Emf1.Width := Aw;
  Emf1.Height := Ah;
  try
   Emf1_Canvas := TMetafileCanvas.Create(Emf1,0);
   try
    Emf1_Canvas.Draw(0,0,AGraphic);
    Emf1_Canvas.MoveTo(0, 0);
    for a:=0 to 10 do
     Emf1_Canvas.LineTo(Random(Aw),Random(Ah));
   finally
    Emf1_Canvas.Free;
   end;
   ACanvas.Draw(Ax,Ay,Emf1);
  finally
   Emf1.Free;
  end;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
Var EMF: TMetafile;
   EMF_Canvas: TmetafileCanvas;
   x, y: integer;
   W, H: integer;
   i,j,a: integer;
begin
{$DEFINE PASHA}
x := StrToInt(Edit1.Text);
y := StrToInt(Edit2.Text);
W := image1.Width;
H := image1.Height;
EMF := TMetafile.Create;
try
 EMF.Enhanced := True;
 EMF.Width := W*x; //размер всего
 EMF.Height := H*y; // метафайла
 EMF_Canvas := TmetafileCanvas.Create(EMF,0);
 try
  for i:=0 to x-1 do
   for j:=0 to y-1 do
   {$IFDEF PASHA}
    with EMF_Canvas do
     begin
       Draw(W*i,H*j,Image1.Picture.Graphic);
       MoveTo(W*i,H*j);
       for a:=0 to 10 do
         LineTo(W*i+Random(W),H*j+Random(H));
     end;
    {$ELSE}
      DrawC(EMF_Canvas,W*i,H*j,W,H,Image1.Picture.Graphic);
    {$ENDIF}

 finally
  EMF_Canvas.Free;
 end;
 EMF.SaveToFile("e:\debug.emf");
finally
 EMF.Free;
end;
ShowMessage("Done");
end;


Функционально делает одно и тоже. Рисует в метафайл сетку из битмапов из Image1 размером   x на y .

В каждой ячейке сверху битмапа случайный узор из линий на всякий случай.

Если поставить, например, х = 200, а у = 1. Для того чтобы метафайл (изображение) не помещался на экране.

То код из {$IFDEF PASHA} отрабатывает как задумано. Есть грид 200х1 с ячейками-битмапами и сверху чуток линий.

А код из {$ELSE} отрисовывает только "по размерам" экрана, а все остальное заполнено только линиями (векторы), а битмапов не видно.

Почему так? Извините, если сумбурно, очень устал.

Если вообще не понятно, смогу привести примеры файлов результатных.


 
pasha_golub ©   (2006-01-24 18:33) [1]

Добавлю. По идее.

Код из  {$IFDEF PASHA} рисует сразу на конечную канву, а код из {$ELSE} создает дополнительно временный метафайл (внутри DrawC), его прорисовывает, и потом выводит временный метафайл на конечную канву.


 
pasha_golub ©   (2006-01-25 11:12) [2]

Думал, что может зависеть от битмапа (палитра, размер и т.д.), перепробовал все что было под рукой. В пределах экрана рисует, за пределами - нет.

ЗЫ Если у кого-то десктоп мультимониторный, проверьте, пожалуйста. Интересно дюже.


 
MBo ©   (2006-01-25 12:55) [3]

воспроизвел - действительно, не рисует дальше определенной позиции - но у меня это не размер экрана (800), а больше - около 1000. С чем связано - непонятно :(


 
pasha_golub ©   (2006-01-25 20:04) [4]

Спасибо, Борис. Хотя бы за внимание. :0)



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

Форум: "Основная";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.089 c
2-1139402563
R.O.O.T
2006-02-08 15:42
2006.02.26
Как добавить поле в таблицу базы Access


8-1127057492
maVladimir
2005-09-18 19:31
2006.02.26
Коррекция цвета в Windows


6-1132152638
pmi1
2005-11-16 17:50
2006.02.26
Кто-то пользовался функцией InternetCheckConnection?


2-1139423531
JEK2
2006-02-08 21:32
2006.02.26
Не понятные ошибки при работе с БД


15-1139283950
Логин
2006-02-07 06:45
2006.02.26
FastReport 3.20





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский