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

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

Загрузка точек из файла Adobe Illustrator [D7, XP]


v_a_belousov ©   (2010-10-24 16:46:00) 

Здравствуйте! Есть файла*.ai - файл Adobe Illustrator написал процедуру загрузки точек из него...

procedure TSMainForm.GetPointsFromIllustrator(ai: string; out PolygonPoints: TPolygonPoints);
var i, num, anum: integer; ai_s: string;
ap: array of real; AiPos: array of integer;
begin
//
num := pos(AnsiUpperCase('Note'), AnsiUpperCase(ai));
//
ai := copy(ai, num+Length('Note'), Length(ai));
//
repeat
//
for i:=1 to 9 do
begin
 //
 num := pos(inttostr(i), ai);
 //
 if num<>0 then
  begin
   //
   anum := Length(AiPos);
   //
   SetLength(AiPos, anum+1);
   //
   AiPos[anum] := num;
  end;
end;
//
if Length(AiPos)>0 then
begin
 //
 for i:=0 to Length(AiPos)-1 do
  begin
   //
   if num>AiPos[i] then num:=AiPos[i];
  end;
end;
//
AiPos := nil;
//
if num<>0 then
begin
 //
 ai := copy(ai, num, Length(ai));
 //
 anum := Length(ap);
 //
 SetLength(ap, anum+1);
 //
 ap[anum] := StrToFloat(copy(ai, 1, pos(' ', ai)));
end;
//
ai := copy(ai, pos(' ', ai)+1, Length(ai));
until num=0;
//
SetLength(PolygonPoints, (Length(ap) div 2));
//
for i:=0 to Length(PolygonPoints)-1 do
begin
 //
 PolygonPoints[i].X := round(ap[i+i]);
 PolygonPoints[i].Y := round(ap[i+i+1]);
end;
end;

Но при рисовании полигона по этим точкам изображение получается перевернутым. Что не так не понимаю.


v_a_belousov   (2010-10-26 00:20:00) [1]


> по твоей теме http://www.javaportal.ru/articles/ai.html

спасибо нашел кое что полезное...


DVM   (2010-10-25 22:16:00) [2]


> v_a_belousov   (25.10.10 21:55) [14]

AI файл внутри хранит данные в формате PostScript. Спецификация PostScript вроде как доступна и открыта, с ее изучения и надо начинать имхо. Вот тутнемного по твоей теме http://www.javaportal.ru/articles/ai.html


v_a_belousov   (2010-10-25 21:55:00) [3]


> не поняв причину такого различия использовать такие поправки
> чревато в будущем

а как понять причину? Узнать как Adobe все сохраняет?


DVM   (2010-10-25 21:38:00) [4]


> Вставил коэффицент 1,34 вроде все совпадает теперь.

Разного рода коэффициенты и постоянные неизвестной природы - это обычно костыли, скрывающие недостатки реализации или теории. Как временное решение сойдет, но не поняв причину такого различия использовать такие поправки чревато в будущем.


v_a_belousov   (2010-10-25 12:39:00) [5]

Вставил коэффицент 1,34 вроде все совпадает теперь. Ещё раз спасибо)


v_a_belousov   (2010-10-25 12:15:00) [6]


> просто нужно ввести какой-нить коэффициент на масштабирование

А как его ввести подскажите пожалуйста.


KilkennyCat   (2010-10-25 07:02:00) [7]


> Но и по координатам изображение чуть ниже чем надо...


разумеется. пустое место - это тоже изображение. если масштаб не тот, то и положение не то.


v_a_belousov   (2010-10-24 23:38:00) [8]


> > ниже по координате у или уже по высоте?
>
> по координатам... наверно...

Просто не знаю как это словами объяснить проще... и само изображение и по высоте и по ширине немного меньше чем должно быть... это как я понимаю можно решить с помощью масштабирования... за это спасибо!!! Но и по координатам изображение чуть ниже чем надо...


v_a_belousov   (2010-10-24 23:04:00) [9]


> ропорционально или нет? если пропорции не нарушились, значит
> все хорошо, просто нужно ввести какой-нить коэффициент на
> масштабирование.
>

Пропорционально. А как ввести?

> ниже по координате у или уже по высоте?

по координатам... наверно...


KilkennyCat   (2010-10-24 22:44:00) [10]

пропорционально или нет? если пропорции не нарушились, значит все хорошо, просто нужно ввести какой-нить коэффициент на масштабирование.

> немного ниже чем должно быть

ниже по координате у или уже по высоте?


v_a_belousov   (2010-10-24 22:29:00) [11]

Сделал так

 PolygonPoints[i].X := round(ap[i+i]);
 PolygonPoints[i].Y := MainImage_I.Picture.Bitmap.Height - round(ap[i+i+1]);

Но изображение теперь немного ниже чем должно быть. И ширина у него меньше чем должна быть. Подскажите пожалуйста что ещё нужно исправлять.


v_a_belousov   (2010-10-24 21:48:00) [12]


> картинкахейгт было бы разумнее

Ну да) Bitmap.Width Bitmap.Height
Вроде получилось. Спасибо!


KilkennyCat   (2010-10-24 21:45:00) [13]


> ScreenHeight

картинкахейгт было бы разумнее


v_a_belousov   (2010-10-24 21:36:00) [14]


> Перевёрнутым - это нормально.
> У экрана нуль сверху, а у Иллюстратора - снизу.

А как мне его в программе перевернуть? Выходит так...
X := ScreenWidth - Point.X
Y := ScreenHeight - Point.Y ?


Styx   (2010-10-24 20:49:00) [15]

Перевёрнутым - это нормально.
У экрана нуль сверху, а у Иллюстратора - снизу.


v_a_belousov   (2010-10-24 17:02:00) [16]

В параметр ai приходит текст из файла *.ai
TPolygonPoints = array of TPoint


Наверх

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