XE8 FMX TImageViewer get coordinates in bitmap from the screen

Hi,

I am using Firemonkey in XE8 (both mobile and desktop) to display a bitmap which shows an actual map.  I know the real ground coordinates for every pixel in the bitmap, and want to get those ground coordinates that correspond to a pixel on the screen.

If the bitmap is zoomed out so that it has a white border around it, I can compute the location of the image in the window using ClientHeight, ClientWidth, and the BitmapScale property, and work out where in the bitmap I am.

If the scrollbars are active because the user has zoomed in, I cannot figure out what part of the bitmap is shown, and I think all the variables (like the x and y sent to ImageViewer1MouseMove) are relative to the viewport displayed and not the actual bitmap.  I have tracked a number of the properties for the ImageViewer (e.g. Position, Margins, Padding, and ViewportPosition) but they appear to always be zero.  

How can I compute what part of the bitmap is actually on screen?

Thanks for any assistance.
0
Peter
7/22/2015 12:21:34 AM
embarcadero.delphi.firemonkey 4901 articles. 4 followers. Follow

17 Replies
2945 Views

Similar Articles

[PageSpeed] 14
Get it on Google Play
Get it on Apple App Store

var
    ScreenLastX,ScreenLastY,       //coordinates of the current point, relative to the size of the scaled bitmap
    MapLastX,MapLastY : integer;   //coordinates of the current point, relative to the size of the original bitmap
    BMP_blowup_x,BMP_blowup_y,    //size of the full bitmap in pixels with the current BitmapScale
    vpx,vpy : float;              //x and y coordinates in pixels of upper left corner of the current screen view
                                      //captured from NewViewportPosition in ImageViewer1ViewportPositionChange
    xFrac,yFrac,                      //fractional position within the bitmap (0-1), with origin in the upper left corner
    ULx,ULy,LRx,LRy : float; //coordinates in screen pixels of the corners of the bitmap in the image viewer, if it has a white collar


You can find the offset by setting a global variable and assigning it when the viewport changes.  I would love to find out that this is saved, but I cannot find it.  Thus I am leaving the question open, in hopes of finding a more elegant answer.

procedure TianMDMainForm.ImageViewer1ViewportPositionChange(Sender: TObject;
  const OldViewportPosition, NewViewportPosition: TPointF;
  const ContentSizeChanged: Boolean);
begin
   vpx := NewViewPortPosition.X;
   vpy := NewViewPortPosition.Y;
end;


procedure TianMDMainForm.ImageViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
begin
      BMP_blowup_x := ImageViewer1.BitmapScale * ImageViewer1.Bitmap.Width;
      BMP_blowup_y := ImageViewer1.BitmapScale * ImageViewer1.Bitmap.Height;

      ScreenLastX := round(x + vpx);
      ScreenLastY := round(Y + vpy);

      if ImageViewer1.ClientWidth > BMP_blowup_x then begin
         ULx := 0.5 * (ImageViewer1.ClientWidth - BMP_blowup_x);
         LRx := ImageViewer1.ClientWidth - ULx;
         xFrac := (x - ULx) / (LRx - ULx);
      end
      else begin
         xfrac := (x + vpx)/ BMP_blowup_x;
      end;

      if ImageViewer1.ClientHeight > BMP_blowup_Y then begin
         ULy := 0.5 * (ImageViewer1.ClientHeight - BMP_blowup_Y);
         LRy := ImageViewer1.ClientHeight - ULy;
         yFrac := (y - ULy) / (LRy - ULY);
      end
      else begin
         yfrac := (y + vpy) / BMP_blowup_Y;
      end;

      MapLastX := round(xFrac * ImageViewer1.Bitmap.Width);
      MapLastY := round(yFrac * ImageViewer1.Bitmap.Height);
          
       Label1.Text :=  MapDraw.ScreenLocationString(MapLastx,MapLasty) ;

end;
0
Peter
7/22/2015 5:32:02 PM
> {quote:title=Peter Guth wrote:}{quote}
> Hi,
> 
> I am using Firemonkey in XE8 (both mobile and desktop) to display a bitmap which shows an actual map.  I know the real ground coordinates for every pixel in the bitmap, and want to get those ground coordinates that correspond to a pixel on the screen.
> 
> If the bitmap is zoomed out so that it has a white border around it, I can compute the location of the image in the window using ClientHeight, ClientWidth, and the BitmapScale property, and work out where in the bitmap I am.
> 
> If the scrollbars are active because the user has zoomed in, I cannot figure out what part of the bitmap is shown, and I think all the variables (like the x and y sent to ImageViewer1MouseMove) are relative to the viewport displayed and not the actual bitmap.  I have tracked a number of the properties for the ImageViewer (e.g. Position, Margins, Padding, and ViewportPosition) but they appear to always be zero.  
> 
> How can I compute what part of the bitmap is actually on screen?
> 
> Thanks for any assistance.

TFMXImageViewer is a terrible component with huge number of so called "bugs", which are actually design and coding errors. Fixing these errors is very difficult, because they involve a long chain of code in many components, which should not have anything to do with it, but they do (a TAniCalculations, to name one, for example). ViewportPosition, for example, behaves in a very strange way: it is always zero if the image is smaller than the viewport, and it is not zero if at least one of the image dimension
s is larger than the viewport. 

Try to look at the code presented in QuarkCube demos on YouTube, as, for example, https://www.youtube.com/watch?v=B1OIm6RIU3M, to understand how to use and how get the access to some private properties of the FMXImageViewer and correct its behavior (ContentBounds, ExtentX, ExtentY etc).

On a general note, there are ClientToScreen and ScreenToClient functions, which should help with translation of screen coordinates to actual bitmap coordinates and vice versa.

P.S. I do not have XE8, but I tested this component very thoroughly in XE4, XE5, XE6 and XE7. To the best of my knowledge, "bugs" of this component were never fixed.
0
Vadim
7/24/2015 7:07:50 PM
Vadim wrote:

> P.S. I do not have XE8, but I tested this component very thoroughly
> in XE4, XE5, XE6 and XE7. To the best of my knowledge, "bugs" of
> this component were never fixed.

Were they reported to QualityCentral/QualityPortal?

-- 
Remy Lebeau (TeamB)
0
Remy
7/24/2015 8:02:30 PM
> {quote:title=Remy Lebeau (TeamB) wrote:}{quote}
> Vadim wrote:
> 
> > P.S. I do not have XE8, but I tested this component very thoroughly
> > in XE4, XE5, XE6 and XE7. To the best of my knowledge, "bugs" of
> > this component were never fixed.
> 
> Were they reported to QualityCentral/QualityPortal?
> 
> -- 
> Remy Lebeau (TeamB)

I reported a lot of "bugs" since the time when I became a better tester for XE4 and later versions. These bugs were mainly regarding 3D and multimedia components, and they were opened, accepted and mainly ignored.
After I complained that bugs are not fixed (in a private beta testers forum), I was immediately excluded from beta testers by some "high official" at EMBT. Since that happened, I am not submitting reports to Quality Central anymore.

Edited by: Vadim Istomin on Jul 24, 2015 4:44 PM
0
Vadim
7/24/2015 8:45:16 PM
Vadim wrote:

> After I complained that bugs are not fixed (in a private beta testers
> forum), I was immediately excluded from beta testers by some "high
> official" at EMBT.

I doubt that, but even if it were true, could it be you were excluded for 
how you were complaining, rather than the fact that you were complaining 
at all?  Beta testers are supposed to find and report problems.  Have you 
tried contacting Embarcadero to reinstate your beta status?

> Since that happened, I am not submitting reports to Quality Central
> anymore.

Nothing should be posted to QC anymore, but certainly to QP.  How do you 
expect things to get fixed when they are not reported?

-- 
Remy Lebeau (TeamB)
0
Remy
7/24/2015 9:09:45 PM
> {quote:title=Remy Lebeau (TeamB) wrote:}{quote}
> Vadim wrote:
> 
> > After I complained that bugs are not fixed (in a private beta testers
> > forum), I was immediately excluded from beta testers by some "high
> > official" at EMBT.
> 
> I doubt that, but even if it were true, could it be you were excluded for 
> how you were complaining, rather than the fact that you were complaining 
> at all?  Beta testers are supposed to find and report problems.  Have you 
> tried contacting Embarcadero to reinstate your beta status?
> 
> > Since that happened, I am not submitting reports to Quality Central
> > anymore.
> 
> Nothing should be posted to QC anymore, but certainly to QP.  How do you 
> expect things to get fixed when they are not reported?
> 
> -- 
> Remy Lebeau (TeamB)

Typical TeamB answer. First, this is not true. Second, even if this is true, you have to blame yourself anyway. Brilliant!

I reported in a private forum that the bugs that were listed in the QC database as fixed were not fixed in the latest production release, and I proved that it was, indeed, true.
And yes, I was very angry, and I said that reporting bugs is a waist of time. After that some person, which name I do not want to mention, personally made sure that I could not login to the beta testers forum.
He did it so quickly, that I could not even respond to his reply to my message.

This is why I am not dealing with this anymore.
0
Vadim
7/24/2015 9:30:54 PM
Thanks for the suggestions.  I will try to check the videos, but I wish they had source code available.
0
Peter
7/30/2015 2:14:35 AM
> {quote:title=Peter Guth wrote:}{quote}
> Thanks for the suggestions.  I will try to check the videos, but I wish they had source code available.

But the source code IS available. You can read it from the screen, just click the "pause" button, and make sure that player's resolution is set to its maximum. This is less convenient than downloading the ZIP file, but the code is still there.
I can even say that looking at the process of coding "step by step" is much better for learning than just getting some "ready to go" demo project. I personally learned a lot from these movies, which are dedicated mostly to 3D components and 3D scene design.

I wish I could say "thank you" to the author!
0
Vadim
7/30/2015 3:29:05 AM
> {quote:title=Peter Guth wrote:}{quote}
> Thanks for the suggestions.  I will try to check the videos, but I wish they had source code available.

But the source code IS available. You can read it from the screen, just click the "pause" button, and make sure that player's resolution is set to its maximum. This is less convenient than downloading the ZIP file, but the code is still there.
I can even say that looking at the process of coding step by step is much better for learning than just getting some "ready to go" demo project. I personally learned a lot from these movies, which are dedicated mostly to 3D components and 3D scene design.

I wish I could say "thank you" to the author!
0
Vadim
7/30/2015 3:29:30 AM
> I wish I could say "thank you" to the author!

I agree; he has put a lot of work into those videos, and is too self-effacing in the comment that most people won't appreciate his work, which is admittedly for a small audience.  It takes a lot of study to catch all the nuances, and only being able to get snippets of code at a time.

My real complaint is the lack of documentation for the controls (tMesh is another I have struggled with), and the lack of serious examples that show how to work with them (there were some decent ones for tMesh, but they got broken in the changes to FireMonkey).
0
Peter
7/31/2015 3:18:42 PM
> {quote:title=Peter Guth wrote:}{quote}
> > I wish I could say "thank you" to the author!
> 
> I agree; he has put a lot of work into those videos, and is too self-effacing in the comment that most people won't appreciate his work, which is admittedly for a small audience.  It takes a lot of study to catch all the nuances, and only being able to get snippets of code at a time.
> 
> My real complaint is the lack of documentation for the controls (tMesh is another I have struggled with), and the lack of serious examples that show how to work with them (there were some decent ones for tMesh, but they got broken in the changes to FireMonkey).

The lack of documentation? Please, don't even start. The situation with FMX documentation is appalling. Not surprisingly (since FMX is originally Russian), there is a very good book describing FireMonkey components, but it is in Russian (by D.D. Osipov, "Delphi programming for Windows, OSX, iOS and Android" St.Petersburg, 2014). This is not his first Delphi book, but probably the best. It even has a chapter about TMesh, TMeshData and TModel3D. As far as I know, EMBT never tried to arrange the translation 
of this book, or even to mention it anywhere. Instead of promoting books that have nothing to do with FireMonkey, they could order and publish the translation of this one. 

For anyone who is interested and can read in Russian, here is the link: http://www.ozon.ru/context/detail/id/29512660/
0
Vadim
7/31/2015 8:15:10 PM
Not only is the Firemonkey documentation an issue, but things have a habit or moving around to new homes in other units so that demos that once worked no longer do.

I will keep the book in mind, as I had two years of Russian 40 years ago and could figure out that the button on the web site said "Buy".

What I really want is to open a viewport that lets me address OpenGL directly, since I want to plot very large numbers of points (millions if the hardware would support it, certainly in the 100,000's) and I think Firemonkey will not like that.  I have it working in Windows Firemonkey, and with that, I can fake the mesh.
0
Peter
8/2/2015 4:41:45 PM
Does the book include sources?
0
Gilbert
8/2/2015 7:38:54 PM
> {quote:title=Peter Guth wrote:}{quote}
> Not only is the Firemonkey documentation an issue, but things have a habit or moving around to new homes in other units so that demos that once worked no longer do.
> 
> I will keep the book in mind, as I had two years of Russian 40 years ago and could figure out that the button on the web site said "Buy".
> 
> What I really want is to open a viewport that lets me address OpenGL directly, since I want to plot very large numbers of points (millions if the hardware would support it, certainly in the 100,000's) and I think Firemonkey will not like that.  I have it working in Windows Firemonkey, and with that, I can fake the mesh.

To use OpenGL directly in FMX you can create TContext3D using TContextManager or just use the Context property of the form. After that put your OpenGL commands (or drawing primitives available in Context class) between Context.BeginScene and Context.EndScene. Also, you probably saw the CubeMan3D demo, which shows how to use OpenGL without FireMonkey at all (and, of course, the example is very simplistic).

However, rendering a mesh with "a lot of points" will be practically limited by the maximal size of the TMeshData that you can allocate, so, most likely you will need 64-bit address space. By the way, I never worked with huge meshes, only with huge textures. But, in my experience, one can create and render 1250^3 pixels texture (4.315GB) on 64-bit system, but no more than ~600^3 pixels texture on 32-bit system, even though the video card is the same and technically it should support much more.
0
Vadim
8/2/2015 7:57:11 PM
> {quote:title=Gilbert Padilla wrote:}{quote}
> Does the book include sources?

The book has a lot of code examples and, as they say on the first page, example projects are available for download at the publisher's site. However, I could not find any link to it anywhere; perhaps did not try hard enough.
By the way, I checked today, and it seems that the hard copy is not available anymore. However, they have e-book version for 359 roubles, which is less than $6.00.
0
Vadim
8/2/2015 8:10:52 PM
> {quote:title=Peter Guth wrote:}{quote}
> Not only is the Firemonkey documentation an issue, but things have a habit or moving around to new homes in other units so that demos that once worked no longer do.
> 
> I will keep the book in mind, as I had two years of Russian 40 years ago and could figure out that the button on the web site said "Buy".
> 
> What I really want is to open a viewport that lets me address OpenGL directly, since I want to plot very large numbers of points (millions if the hardware would support it, certainly in the 100,000's) and I think Firemonkey will not like that.  I have it working in Windows Firemonkey, and with that, I can fake the mesh.

To use OpenGL directly in FMX you can create TContext3D using TContextManager or just use the Context property of the form. After that put your OpenGL commands (or drawing primitives available in Context class) between Context.BeginScene and Context.EndScene. Also, you probably saw the CubeMan3D demo, which shows how to create cross-platform OpenGL project without FireMonkey at all (and, of course, the example is very simplistic).

However, rendering a mesh with "a lot of points" will be practically limited by the maximal size of the TMeshData that you can allocate, so, most likely you will need 64-bit address space. By the way, I never worked with huge meshes, only with huge textures. But, in my experience, one can create and render 1250^3 pixels texture (4.315GB) on 64-bit system, but no more than ~600^3 pixels texture on 32-bit system, even though the video card is the same and technically it should support much more.
0
Vadim
8/2/2015 8:13:07 PM
Thanks for the hints of drawing straight to the OpenGL in Firemonkey; I will have to try the out.

I have seen CubeMan, and have it working to display the geosptial data I want in Windows.  But I have two issues with it:
1.  It does not show how to hook up controls, as I would like to rotate the model interactively.
2.  The Android version will not compile.  They moved the location of a routine between XE5 and XE8, and darned if I cannot find it, so I am stuck until I find that (another thread on this forum).

I had better luck with the code at http://escargot.la.coocan.jp/SimpleSamples/SimpleSampleOpenGL_FMX.pas (I was not able to find the project file or the form, but was able to recreate them), and got it to run in a TForm3D in Windows.  Since I upgraded to Windows 10, I cannot talk to my Nexus 7, so no luck there for a while (yet another thread on this forum).

I need to display two types of data: points clouds with points that could be all other the place (true 3D), and imagery that needs to be draped on the topography (only 2.5D).  The second could use a tMesh, but it can also use the same code as the point cloud, which is just a lot of 
           glColor3f(PointXYZColor[i].r,PointXYZColor[i].g,PointXYZColor[i].b );
           glVertex3f(0.075*PointXYZColor[i].x,0.01*PointXYZColor[i].z,0.075*PointXYZColor[i].y);
which I think might be faster than trying to set up TMesh, where every point has a different color and there is no function to set them.
0
Peter
8/2/2015 8:34:29 PM
Reply:

Similar Artilces:

TBitmap gets smaller on rotation in delphi xe8 firemonkey multi device proj
I have an TImage compontent with a bitmap. The image component size properties are singles and TBitmap size properties are integers. The bitmap needs to be the same size as the component and i've made a resize method that gets called everytime the screen rotates. So i've tried to trunc the component size in order to set the size and tried to round it, but every time the bitmap gets smaller. I also tried to cast the sizes of the image component to integer so it doesn't have to round the size for the bitmap. But this has no effect. *Is there a solution for this problem?* I...

Ann: FastReport FMX for Delphi XE3 (FireMonkey 2) and XE2 (FireMonkey) released
Dear friends, Visual report designer is available now on both MS Windows and MAC OS X! Full sources. We can write here full list of possibilities, but it will so long. Let see FastReport VCL and FastReport FMX comparison table: http://www.fast-report.com/en/products/comparison-fast-report-firemonkey-vcl.html And all of this - just now in your hands for business-applications for Mac. Report generator FastReport FMX is the first multiplatform solution for including Business Intelligence into software based on Embarcadero FireMonkey IDE (Delphi for MS Windows and Apple Mac OS X)...

how to get screen coordinates ??
hi, how can i get screen coordinates in FireFox  ???like i can get in IE by using following code : var e = window.event;  var x1 = e.x; var y1 = e.y;  Thanx in advance Try with e.pageX and e.pageY Hi Sanjay  You can use event.clientX or event.clientY methods to get screen coordinates. Works on all browsers. Good Luck Work in FF only, for IE , you have to modify the code.  HTML Part:      <a href="http://forums.asp.net/AddPost.aspx?ReplyToPostID=2563264&Quote=False#" onclick="screenOrd();">Clcik</a>&nbs...

How do you get screen coordinates of controls
Can someone tell me how in PB 5.0 you get the global screen coordinates of a control? This.x and This.y just give me relative to the current window. Thanks, Alan You'll need to use WIN API coordinate transformation functions to get screen coordinates... AlanAnde wrote in message <36DC32C4.519EA4C4@concentric.net>... >Can someone tell me how in PB 5.0 you get the global screen coordinates >of a control? .... which are: GetClientRect ScreenToClient ClientToScreen You'll need to declare the supporting Win32 structures POINT and RECT. p...

Firemonkey XE6 assign bitmap to tImageViewer
Hi, I would like to assign a bitmap that I create programatically in memory to a TImageViewer (I have tried tImage with the same results). This is my code, and my only working solution has been to save the bitmap to a file (so I know the bitmap is working), and then read that. Is there a way to avoid the disk read/write operations, since the bitmap could be large? MapDraw.DrawMapOnBMP(MyBitmap,fName); //creates an in memory bitmap //ImageViewer1.Bitmap := MyBitmap; //does not work //ImageViewer1.Bitmap.Assign(MyBitmap); //does n...

How do I get an Icon from an EXE or DLL into a FMX bitmap?
I am trying to read an Icon from an EXE into a FMX TImage component. Currently, this is the code I am trying to use, but I am not clear on how to use a windows HANDLE to get the bitmap in a TImage control: HANDLE ic = LoadImage( HInstance, UnicodeString(icPath).c_str(),IMAGE_ICON,0,0,LR_DEFAULTSIZE); // I believe this gives me a handle to the ICON I want if( ic ) { TImage *img = new TImage(NULL); HWND hdl = FmxHandleToHWND(img->Bitmap->Handle); // I believe this gives me a windows handle, instead of FMX // Not sure what to do here to copy from the HANDLE to th...

How to get absolute postion of a firemonkey control on screen ?
I want to get the control's absolute position in OnPaint Event . Is any document / books I can find these kind of detail ? I can only find them in the source code ? > {quote:title=Peter Guo wrote:}{quote} > I want to get the control's absolute position in OnPaint Event . Is any document / books I can find these kind of detail ? I can only find them in the source code ? Here's code to go the other way, from global co-ordinates to local ones. Reverse the calls and the function names and you should have what you need. (Since you're inside the control you won't ne...

Delphi XE8 FireMonkey iOS Style problem with segmented buttons
Hi, Going through some tutorials to get used to mobile development using FireMonkey and Delphi XE8. One of the most basic layouts tend to use the toolbar component with segmented speed buttons, and then applying the correct segmented style to each button. However, there seems to be an issue with the iOS style. ...

Delphi XE8 FireMonkey iOS Style problem with segmented buttons [Edit]
Hi, Going through some tutorials to get used to mobile development using FireMonkey and Delphi XE8. One of the most basic layouts tend to use the toolbar component with segmented speed buttons, and then applying the correct segmented style to each button. However, there seems to be an issue with the iOS style. [Screenshot.|https://drive.google.com/file/d/0B68Ju-patBf-RVVEMmI5UDd2cG8/view?usp=sharing] Using the "segmentedbuttonleft", "segmentedbuttonmiddle", and "segmentedbuttonright" styles is producing an extra border on the right button in iOS. It seems...

How do you get to get to the NAL debug screen?
I remember a debug screen that you could get to in NAL by doing some function key. I can't remember exactly how it work, could anyone assist? ZFD 4.01 IR4 Thanks , > I remember a debug screen that you could get to in NAL by doing some > function key. I can't remember exactly how it work, could anyone assist? > Help, About, Hold down F2, More - Anders Gustafsson, Engineer, CNE6, ASE NSC Volunteer Sysop Pedago, The Aaland Islands (N60 E20) Novell does not monitor these forums officially. Enhancement requests for all Novell products may be made at h...

superreview requested: [Bug 268576] Method to get screen coordinates on nsIFrame : [Attachment 166147] Patch
Boris Zbarsky <bzbarsky@mit.edu> has asked Robert O'Callahan <roc@ocallahan.org> for superreview: Bug 268576: Method to get screen coordinates on nsIFrame https://bugzilla.mozilla.org/show_bug.cgi?id=268576 Attachment 166147: Patch https://bugzilla.mozilla.org/attachment.cgi?id=166147&action=edit ...

superreview granted: [Bug 268576] [FIX]Method to get screen coordinates on nsIFrame : [Attachment 166147] Patch
Robert O'Callahan <roc@ocallahan.org> has granted Boris Zbarsky <bzbarsky@mit.edu>'s request for superreview: Bug 268576: [FIX]Method to get screen coordinates on nsIFrame https://bugzilla.mozilla.org/show_bug.cgi?id=268576 Attachment 166147: Patch https://bugzilla.mozilla.org/attachment.cgi?id=166147&action=edit ------- Additional Comments from Robert O'Callahan <roc@ocallahan.org> + // XXXbz there needs to be a better way to do this scaling + nsIntRect ourPxRect(NSTwipsToIntPixels(ourRect.x, t2p), + NSTwipsToIntPixels(ourRect.y, t...

POST GET GET GET GET... WTH?
Hi, I'm at a loss to explain this... I have an ASPX page that I can't always navigate to. When I developed the app (it's Starter Kit Portal-based), I did it on my LAN and have had no trouble accessing the page. However, upon deployment, I see the following behavior: 1. POST request goes out looking for MyForm.aspx 2. GET request for MyForm.aspx 3. GET request for MyForm.aspx 4. ... X. GET request Sometimes, the page finally loads. Other times, it just ends up blank. Many times, it doesn't load at ALL the first POST - I just get a "The pa...

Novell login screen gets replaced by Microsoft login screen.
Hi, we work with netware 6 with Zfd4. We have installed several XP computers with Client 4.9sp1. Sometimes the novell login screen is replaced with the one from microsoft. we can place it back if we enable it again in the client properties (initial novell login) but then after a few times it is disabled again. this behaviour happens at random and we have not been able to reproduce it... i hope anyone can help.. regards marco Marco, ZENworks for Desktops Management Agent 4 could be getting in the way... Microsoft (MSGINA) login dialog displayed instead of N...

Web resources about - XE8 FMX TImageViewer get coordinates in bitmap from the screen - embarcadero.delphi.firemonkey

Resources last updated: 1/5/2016 12:01:30 PM