ImageEn for Delphi and C++ Builder ImageEn for Delphi and C++ Builder

 

ImageEn Forum
Profile    Join    Active Topics    Forum FAQ    Search this forumSearch
Forum membership is Free!  Click Join to sign-up
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 ImageEn Library for Delphi, C++ and .Net
 ImageEn and IEvolution Support Forum
 BackBuffer
 New Topic  Reply to Topic
Author Previous Topic Topic Next Topic  

w2m

USA
1990 Posts

Posted - May 03 2016 :  16:00:01  Show Profile  Reply
procedure TForm1.ImageEnView1DrawBackBuffer(Sender: TObject);
var
  ix1: Integer;
  iy1: Integer;
  ix2: Integer;
  iy2: Integer;
  iz: double;
begin
  iz := ImageEnView1.Zoom / 100;
  ImageEnView1.BackBuffer.Canvas.Pen.Width := 1;
  ImageEnView1.BackBuffer.Canvas.Pen.Color := clBlue;
  ImageEnView1.BackBuffer.Canvas.Pen.Style := psSolid;
  ImageEnView1.BackBuffer.Canvas.Brush.Style := bsClear;
  ix1 := ImageEnView1.OffsetX*Round(iz);
  iy1 := ImageEnView1.OffsetY*Round(iz);
  ix2 := (ImageEnView1.IEBitmap.Width-1) * Round(iz);
  iy2 := (ImageEnView1.IEBitmap.Height-1) * Round(iz);
  ImageEnView1.BackBuffer.Canvas.Rectangle(ix1, iy1, ix2 + ix1, iy1 + iy2);
  ImageEnView1.BackBuffer.Canvas.Pen.Color := clBlack;
  ImageEnView1.BackBuffer.Canvas.MoveTo((ix2 + ix1) div 2, iy1);
  ImageEnView1.BackBuffer.Canvas.LineTo((ix2 + ix1) div 2, iy1 + iy2);
  ImageEnView1.BackBuffer.Canvas.MoveTo(ix1, iy2 div 2);
  ImageEnView1.BackBuffer.Canvas.LineTo((ix2 + ix1), iy2 div 2);
end;

This should draw a blue rectangle along the border with a ("+" crosshair in the center), but this fails to draw correctly when zoomed. Why?

Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development

xequte

39056 Posts

Posted - May 03 2016 :  18:52:40  Show Profile  Reply
Hi Bill

You don't need to adjust for Zoom with Offset and Extent values (as they are the "onscreen" values):

procedure Tfmain.ImageEnView1DrawBackBuffer(Sender: TObject);
var
  ix1: Integer;
  iy1: Integer;
  ix2: Integer;
  iy2: Integer;
begin
  ix1 := ImageEnView1.OffsetX ;
  iy1 := ImageEnView1.OffsetY ;
  ix2 := ImageEnView1.ExtentX ;
  iy2 := ImageEnView1.ExtentY ;
  
  ImageEnView1.BackBuffer.Canvas.Pen.Width := 1;
  ImageEnView1.BackBuffer.Canvas.Pen.Color := clBlue;
  ImageEnView1.BackBuffer.Canvas.Pen.Style := psSolid;
  ImageEnView1.BackBuffer.Canvas.Brush.Style := bsClear;
  ImageEnView1.BackBuffer.Canvas.Rectangle(ix1, iy1, ix1 + ix2, iy1 + iy2);
  
  ImageEnView1.BackBuffer.Canvas.Pen.Color := clBlack;
  ImageEnView1.BackBuffer.Canvas.MoveTo( ix1 + ix2 div 2, iy1 );
  ImageEnView1.BackBuffer.Canvas.LineTo( ix1 + ix2 div 2, iy1 + iy2);
  ImageEnView1.BackBuffer.Canvas.MoveTo( ix1, iy1 + iy2 div 2);
  ImageEnView1.BackBuffer.Canvas.LineTo( ix1 + ix2, iy1 + iy2 div 2);
end;



Nigel
Xequte Software
www.xequte.com
nigel@xequte.com
Go to Top of Page

w2m

USA
1990 Posts

Posted - May 04 2016 :  10:46:06  Show Profile  Reply
Thanks Nigel.

Bill Miller
Adirondack Software & Graphics
Email: w2m@hughes.net
EBook: http://www.imageen.com/ebook/
Custom Commercial ImageEn Development
Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
Jump To: