How to crop a texture using another Rect
I have a Texture2D, applied on a RawImage, taken from a webcam, which I call "originalImage". I want to crop just a block of this originalImage in base of the position of another rect, called "cropArea". Basically cropArea is a "guide" over my originalImage where I want the user to put his hand, so that I can get another image for just the hand.
The problem is that I can't get the correct pixels of the originalImage relative to the cropArea position. The actually cropped area has an offset relative to cropArea's position I can't understand. Here's a picture showing my problem (I used a random image taken from google as originalImage Texuter2D instead of my webcam)
I have cropArea as child of originalImage in my Hyerarchy, and here's how they were both set up on my inspector when I took the screenshot above.
However, I've already tried many combinations of Anchor Preset/Pivot Point, as I thought that could have been my problem, but some ways I get a different offset, some ways I get an error telling me I'm trying to get pixels out of the array.
Here's my code (It's a code I've written to reproduce my problem, so there's no other codes involved in the function):
[SerializeField] private RawImage originalImage;
[SerializeField] private RawImage cropArea;
[SerializeField] private RawImage croppedImage;
void Update() {
if (Input.GetKeyDown(KeyCode.S))
{
Texture2D croppedTexture = new Texture2D((int)cropArea.rectTransform.rect.width, (int)cropArea.rectTransform.rect.height);
Texture2D originalTexture = (Texture2D)originalImage.mainTexture;
croppedTexture.SetPixels(originalTexture.GetPixels((int)cropArea.rectTransform.anchoredPosition.x, (int)cropArea.rectTransform.anchoredPosition.y, (int)cropArea.rectTransform.rect.width, (int)cropArea.rectTransform.rect.height));
croppedTexture.Apply();
croppedImage.texture = croppedTexture;
}
}
Again, I've tried many combinations in my code, triyng to use localPosition or rect instead of anchoredPosition to get cropArea's position, getting different results, but never the correct one.
I think I'm missing maybe some relations between the position of cropArea and the pixels to get from originalImage, but I really can't get what is it. Everytime I have to deal with Unity UI in runtime it gets me headache, it's so confused and anti-intuitive.
Your answer
Follow this Question
Related Questions
pixel perfect sprited converted from texture2d 0 Answers
Help with SetPixels32 0 Answers
Turning every color in an image to many GameObjects ? 0 Answers
Help understanding GetPixels() Paramenters 0 Answers
How to crop an alpha UI image? 0 Answers