How to get a Rect from Image or RectTranform?

I need to take screen shoot of specific area of my UI, so I need a Rect to use in Texture2D.ReadPixel().

I tried to put an Image on the GameObject and use a script like this:

Rect data=Image.GetPixelAdjustedRect();

voidOnGUI()
{
GUI.Box(data,"test")
}

The result :((the white box is what I’m trying to capture, you can see the darker GUI draw on the upper left)

Im also tried to use

RectTranform.GetWorldCorners()//Take 4 corners of the rectTranform

Camera.WorldToScreenPoint()//And use this to convert them to pixel coordinate

to create a Rect but no luck even it seem closer :((

Please tell me where I’m doing wrong!

Full script

public RectTransform rect;
    //public Image rect;
    public Camera UICam;
    private Rect data;

        Vector3[] corners=new Vector3[]{Vector3.zero,Vector3.zero,Vector3.zero,Vector3.zero};
        Vector2[] rectConners=new Vector2[]{Vector3.zero,Vector3.zero,Vector3.zero,Vector3.zero};
        rect.GetWorldCorners (corners);
  
        for(int i=0; i<4;i++)
        {
            rectConners[i]=UICam.WorldToScreenPoint (corners[i]);
        }
        data=new Rect();
        data.max=rectConners[2];
        data.min=rectConners[0];

        //data=rect.GetPixelAdjustedRect();

Nevermind it work great in Texture2D.ReadPixel() .May be GUI.Box doesn’t draw the correct rect