|
Вопрос # 5 844/ вопрос закрыт / |
|
Здравствуйте! Подскажите пожалуйста. Если кто-то помнит, то я задавал вопрос по созданию ссылок на изображении. Вопрос №5 518. Спасибо огромное Минаю за XML наработки, очень помогли. Но появилась такая проблема есть большие изображения к примеру 1257х663 пикселов. Когда я их открываю, то записываю размеры оригинала и подсчитываю процент. Процент вроде считается правильно. После выделения ссылок на изображении, все сохраняю в свой файл. Но читать изображение со ссылками мне необходимо в уменьшенном виде, и когда я начинаю читать, то ссылки убегают на несколько пикселов вправо или вниз(. Можно ли как нибудь разобраться с моей проблемой?
Изображение открывается в TImage, А поверх него стоит PaintBox
Приложение: Переключить в обычный режим-
- procedure TfMain.bLoadImageClick(Sender: TObject);
- var
- IW, IH: Integer;
- newIW, newIH: Integer;
- begin
- Memo1.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') then
- begin
- newIW:=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);
- var
- p: TPoint;
- begin
- Caption:='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);
- var
- xe, ye, xs, ys, pi_id: integer;
- begin
- xEnd:=X;
- yEnd:=Y;
- Capturing:=False;
- Captured:=False;
-
- if xStart>xEnd then
- begin
- xs:=xStart;
- xe:=xEnd;
- xEnd:=xs;
- xStart:=xe;
- end;
-
- if yStart>yEnd then
- begin
- 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);
- var
- i: Integer;
- IW, IH: Integer;
- nIW, nIH: Integer;
- ms: TMemoryStream;
- begin
- ms:=TMemoryStream.Create;
- dXML.Active:=False;
- if od.Execute then
- begin
- // 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);
- begin
- pb.Left:=i1.Left;
- pb.Top:=i1.Top;
- pb.Height:=i1.Height;
- pb.Width:=i1.Width;
- end;
-
- procedure TfMain.pbClick(Sender: TObject);
- var
- i: integer;
- B_NAME: String;
- iX, iY, iW, iH: Integer;
- begin
- pb.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: Вопрос закрыт (решение принял автор вопроса — Димон): Нужно руководствоваться размерами компонентов в процентных размерах
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|