| 
| 
 | Вопрос # 5 844/ вопрос закрыт / | 
 |  Здравствуйте! Подскажите пожалуйста. Если кто-то помнит, то я задавал вопрос по созданию ссылок на изображении. Вопрос №5 518. Спасибо огромное Минаю за XML наработки, очень помогли. Но появилась такая проблема есть большие изображения к примеру 1257х663 пикселов. Когда я их открываю, то записываю размеры оригинала и подсчитываю процент. Процент вроде считается правильно. После выделения ссылок на изображении, все сохраняю в свой файл. Но читать изображение со ссылками мне необходимо в уменьшенном виде, и когда я начинаю читать, то ссылки убегают на несколько пикселов вправо или вниз(. Можно ли как нибудь разобраться с моей проблемой?Изображение открывается в TImage, А поверх него стоит PaintBox
 Приложение:Переключить в обычный режим  procedure TfMain.bLoadImageClick(Sender: TObject);varIW, IH: Integer;newIW, newIH: Integer;beginMemo1.Clear;mXML.Clear;pb.Repaint; if od.Execute then i1.Picture.LoadFromFile(od.FileName);if FileExists(od.FileName+'.xml') then  mXML.Lines.LoadFromFile(od.FileName+'.xml') else  begin  mXML.Lines.Add('<picture>');  mXML.Lines.Add('<name>'+ExtractFileName(od.FileName)+'</name>');  IW:=i1.Picture.Width;  mXML.Lines.Add('<width>'+IntToStr(IW)+'</width>'); IH:=i1.Picture.Height;  mXML.Lines.Add('<height>'+IntToStr(IH)+'</height>');   end; i1.Proportional:=True;eNewName.Text:=od.FileName; if not FileExists(od.FileName+'.xml') thenbeginnewIW:=pb.Width;percent:=Round(newIW/IW*100);newIH:=pb.Height;//newIH:=Round(IH*percent/100);      mXML.Lines.Add('<percent>'+IntToStr(percent)+'</percent>');  end;end; procedure TfMain.i1MouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  if Captured then    DrawFocusRect(pb.Canvas.Handle, MakeRect(StartPlace, EndPlace));  StartPlace.X:=X;  StartPlace.Y:=Y;  EndPlace.X:=X;  EndPlace.Y:=Y;  xStart:=X;  yStart:=Y;  xEnd:=X;  yEnd:=Y;  DrawFocusRect(pb.Canvas.Handle, MakeRect(StartPlace, EndPlace));  Capturing:=True;  Captured:=True; end; procedure TfMain.i1MouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);varp: TPoint;beginCaption:='X='+IntToStr(x)+'   y='+IntToStr(y);  if Capturing then  begin  DrawFocusRect(pb.Canvas.Handle, MakeRect(StartPlace, EndPlace));  EndPlace.X:=X;  EndPlace.Y:=Y;  xEnd:=X;  yEnd:=Y;  DrawFocusRect(pb.Canvas.Handle, MakeRect(StartPlace, EndPlace));  end;end; procedure TfMain.i1MouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);varxe, ye, xs, ys, pi_id: integer;beginxEnd:=X;yEnd:=Y;Capturing:=False;Captured:=False; if xStart>xEnd thenbegin  xs:=xStart;  xe:=xEnd;  xEnd:=xs;  xStart:=xe;end; if yStart>yEnd thenbegin  ys:=yStart;  ye:=yEnd;  yEnd:=ys;  yStart:=ye;end;   bWidth:=xEnd-xStart;  bHeight:=yEnd-yStart;    xStart:=Round(xStart/percent*100);  xEnd:=Round(xEnd/percent*100);  yStart:=Round(yStart/percent*100);  yEnd:=Round(yEnd/percent*100);  bWidth:=Round(bWidth/percent*100);  bHeight:=Round(bHeight/percent*100);  procedure TfMain.bOpenClick(Sender: TObject);vari: Integer;IW, IH: Integer;nIW, nIH: Integer;ms: TMemoryStream;beginms:=TMemoryStream.Create;dXML.Active:=False;if od.Execute thenbegin//  i1.Picture.LoadFromFile(od.FileName);//  dXML.LoadFromFile(od.FileName+'.xml');ms.LoadFromFile(od.FileName);ms.ReadComponentRes(i1);ms.ReadComponentRes(dXML);end;i1.Height:=472;i1.Width:=721;i1.Top:=39;i1.Left:=8;i1.Proportional:=True;IW:=i1.Picture.Width;IH:=i1.Picture.Height;  nIW:=pb.Width;  percent:=Round(nIW/IW*100);  caption:=IntToStr(percent);  nIH:=pb.Height;//  nIH:=Round(IH*percent/100);dXML.Active:=True;ms.Free;end; procedure TfMain.FormShow(Sender: TObject);beginpb.Left:=i1.Left;pb.Top:=i1.Top;pb.Height:=i1.Height;pb.Width:=i1.Width;end; procedure TfMain.pbClick(Sender: TObject);vari: integer;B_NAME: String;iX, iY, iW, iH: Integer;beginpb.Repaint;for i:=4 to dXML.DocumentElement.ChildNodes.Count - 1 do  begin    iX:=Integer(dXML.DocumentElement.ChildNodes[i].Attributes['x']);    iX:=Round(iX*percent/100);    iY:=Integer(dXML.DocumentElement.ChildNodes[i].Attributes['y']);    iY:=Round(iY*percent/100);    iW:=Integer(dXML.DocumentElement.ChildNodes[i].Attributes['width']);    iW:=Round(iW*percent/100);    iH:=Integer(dXML.DocumentElement.ChildNodes[i].Attributes['height']);    iH:=Round(iH*percent/100);    if (iX<=MX) and    (iY<=MY) and    (iW+iX>=MX) and    (iH+iY>=MY) then    begin    pb.Canvas.Brush.Style:=bsDiagCross;    pb.Canvas.Rectangle(iX, iY, iX+iW, iY+iH);    end;   end; end; procedure TfMain.pbMouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);begin  MX:=X;  MY:=Y;  Caption:='X='+IntToStr(x)+'  Y='+IntToStr(y);end;
|  |   Вопрос задал: Димон (статус: Посетитель)Вопрос отправлен: 26 декабря 2011, 17:43
 Состояние вопроса: закрыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 0. 26 декабря 2011, 20:45: Вопрос закрыт (решение принял автор вопроса — Димон): Нужно руководствоваться размерами компонентов в процентных размерах Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |