Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 844

/ вопрос закрыт /

Здравствуйте! Подскажите пожалуйста. Если кто-то помнит, то я задавал вопрос по созданию ссылок на изображении. Вопрос №5 518. Спасибо огромное Минаю за XML наработки, очень помогли. Но появилась такая проблема есть большие изображения к примеру 1257х663 пикселов. Когда я их открываю, то записываю размеры оригинала и подсчитываю процент. Процент вроде считается правильно. После выделения ссылок на изображении, все сохраняю в свой файл. Но читать изображение со ссылками мне необходимо в уменьшенном виде, и когда я начинаю читать, то ссылки убегают на несколько пикселов вправо или вниз(. Можно ли как нибудь разобраться с моей проблемой?
Изображение открывается в TImage, А поверх него стоит PaintBox

Приложение:
  1.  
  2. procedure TfMain.bLoadImageClick(Sender: TObject);
  3. var
  4. IW, IH: Integer;
  5. newIW, newIH: Integer;
  6. begin
  7. Memo1.Clear;
  8. mXML.Clear;
  9. pb.Repaint;
  10.  
  11. if od.Execute then i1.Picture.LoadFromFile(od.FileName);
  12. if FileExists(od.FileName+'.xml') then
  13. mXML.Lines.LoadFromFile(od.FileName+'.xml') else
  14. begin
  15. mXML.Lines.Add('<picture>');
  16. mXML.Lines.Add('<name>'+ExtractFileName(od.FileName)+'</name>');
  17.  
  18.  
  19. IW:=i1.Picture.Width;
  20. mXML.Lines.Add('<width>'+IntToStr(IW)+'</width>');
  21.  
  22. IH:=i1.Picture.Height;
  23. mXML.Lines.Add('<height>'+IntToStr(IH)+'</height>');
  24.  
  25. end;
  26.  
  27. i1.Proportional:=True;
  28. eNewName.Text:=od.FileName;
  29.  
  30. if not FileExists(od.FileName+'.xml') then
  31. begin
  32. newIW:=pb.Width;
  33. percent:=Round(newIW/IW*100);
  34. newIH:=pb.Height;
  35. //newIH:=Round(IH*percent/100);
  36.  
  37.  
  38.  
  39.  
  40. mXML.Lines.Add('<percent>'+IntToStr(percent)+'</percent>');
  41. end;
  42. end;
  43.  
  44. procedure TfMain.i1MouseDown(Sender: TObject; Button: TMouseButton;
  45. Shift: TShiftState; X, Y: Integer);
  46. begin
  47. if Captured then
  48. DrawFocusRect(pb.Canvas.Handle, MakeRect(StartPlace, EndPlace));
  49. StartPlace.X:=X;
  50. StartPlace.Y:=Y;
  51. EndPlace.X:=X;
  52. EndPlace.Y:=Y;
  53. xStart:=X;
  54. yStart:=Y;
  55. xEnd:=X;
  56. yEnd:=Y;
  57. DrawFocusRect(pb.Canvas.Handle, MakeRect(StartPlace, EndPlace));
  58. Capturing:=True;
  59. Captured:=True;
  60.  
  61. end;
  62.  
  63. procedure TfMain.i1MouseMove(Sender: TObject; Shift: TShiftState; X,
  64. Y: Integer);
  65. var
  66. p: TPoint;
  67. begin
  68. Caption:='X='+IntToStr(x)+' y='+IntToStr(y);
  69. if Capturing then
  70. begin
  71. DrawFocusRect(pb.Canvas.Handle, MakeRect(StartPlace, EndPlace));
  72. EndPlace.X:=X;
  73. EndPlace.Y:=Y;
  74. xEnd:=X;
  75. yEnd:=Y;
  76. DrawFocusRect(pb.Canvas.Handle, MakeRect(StartPlace, EndPlace));
  77. end;
  78. end;
  79.  
  80. procedure TfMain.i1MouseUp(Sender: TObject; Button: TMouseButton;
  81. Shift: TShiftState; X, Y: Integer);
  82. var
  83. xe, ye, xs, ys, pi_id: integer;
  84. begin
  85. xEnd:=X;
  86. yEnd:=Y;
  87. Capturing:=False;
  88. Captured:=False;
  89.  
  90. if xStart>xEnd then
  91. begin
  92. xs:=xStart;
  93. xe:=xEnd;
  94. xEnd:=xs;
  95. xStart:=xe;
  96. end;
  97.  
  98. if yStart>yEnd then
  99. begin
  100. ys:=yStart;
  101. ye:=yEnd;
  102. yEnd:=ys;
  103. yStart:=ye;
  104. end;
  105.  
  106. bWidth:=xEnd-xStart;
  107. bHeight:=yEnd-yStart;
  108.  
  109.  
  110. xStart:=Round(xStart/percent*100);
  111. xEnd:=Round(xEnd/percent*100);
  112. yStart:=Round(yStart/percent*100);
  113. yEnd:=Round(yEnd/percent*100);
  114. bWidth:=Round(bWidth/percent*100);
  115. bHeight:=Round(bHeight/percent*100);
  116.  
  117.  
  118. procedure TfMain.bOpenClick(Sender: TObject);
  119. var
  120. i: Integer;
  121. IW, IH: Integer;
  122. nIW, nIH: Integer;
  123. ms: TMemoryStream;
  124. begin
  125. ms:=TMemoryStream.Create;
  126. dXML.Active:=False;
  127. if od.Execute then
  128. begin
  129. // i1.Picture.LoadFromFile(od.FileName);
  130. // dXML.LoadFromFile(od.FileName+'.xml');
  131. ms.LoadFromFile(od.FileName);
  132. ms.ReadComponentRes(i1);
  133. ms.ReadComponentRes(dXML);
  134. end;
  135. i1.Height:=472;
  136. i1.Width:=721;
  137. i1.Top:=39;
  138. i1.Left:=8;
  139. i1.Proportional:=True;
  140. IW:=i1.Picture.Width;
  141. IH:=i1.Picture.Height;
  142. nIW:=pb.Width;
  143. percent:=Round(nIW/IW*100);
  144. caption:=IntToStr(percent);
  145. nIH:=pb.Height;
  146. // nIH:=Round(IH*percent/100);
  147. dXML.Active:=True;
  148. ms.Free;
  149. end;
  150.  
  151. procedure TfMain.FormShow(Sender: TObject);
  152. begin
  153. pb.Left:=i1.Left;
  154. pb.Top:=i1.Top;
  155. pb.Height:=i1.Height;
  156. pb.Width:=i1.Width;
  157. end;
  158.  
  159. procedure TfMain.pbClick(Sender: TObject);
  160. var
  161. i: integer;
  162. B_NAME: String;
  163. iX, iY, iW, iH: Integer;
  164. begin
  165. pb.Repaint;
  166. for i:=4 to dXML.DocumentElement.ChildNodes.Count - 1 do
  167. begin
  168. iX:=Integer(dXML.DocumentElement.ChildNodes[i].Attributes['x']);
  169. iX:=Round(iX*percent/100);
  170. iY:=Integer(dXML.DocumentElement.ChildNodes[i].Attributes['y']);
  171. iY:=Round(iY*percent/100);
  172. iW:=Integer(dXML.DocumentElement.ChildNodes[i].Attributes['width']);
  173. iW:=Round(iW*percent/100);
  174. iH:=Integer(dXML.DocumentElement.ChildNodes[i].Attributes['height']);
  175. iH:=Round(iH*percent/100);
  176. if (iX<=MX) and
  177. (iY<=MY) and
  178. (iW+iX>=MX) and
  179. (iH+iY>=MY) then
  180. begin
  181. pb.Canvas.Brush.Style:=bsDiagCross;
  182. pb.Canvas.Rectangle(iX, iY, iX+iW, iY+iH);
  183. end;
  184.  
  185. end;
  186.  
  187. end;
  188.  
  189. procedure TfMain.pbMouseMove(Sender: TObject; Shift: TShiftState; X,
  190. Y: Integer);
  191. begin
  192. MX:=X;
  193. MY:=Y;
  194. Caption:='X='+IntToStr(x)+' Y='+IntToStr(y);
  195. end;


Димон Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задал: Димон (статус: Посетитель)
Вопрос отправлен: 26 декабря 2011, 17:43
Состояние вопроса: закрыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 0.

26 декабря 2011, 20:45: Вопрос закрыт (решение принял автор вопроса — Димон): Нужно руководствоваться размерами компонентов в процентных размерах

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:35
Выполнено за 0.02 сек.