Assuming that your quad is convex, you can solve for an interior point using a few linear interpolations (lerps) between the corner points of the quad.
To illustrate, consider finding a point (R for result) at (0.75, 0.5) within the interior of a quad with points A,B,C,D ordered as given in your description. Intuitively, we know that the result is going to be somewhat to the right of the middle. How can we find that?
First consider the simpler case of what would happen if we were looking for (0.75, 0.0). In that situation we would want the point (let's call it P) that sits 75% between A & B. We can find P by lerping between A & B. Similarly, if we simplified to the other extreme of (0.75, 1.0), we would find a point (let's call it Q) that's 75% between C & D. Much like before, we can find Q by lerping between C & D.
But we didn't actually want either extreme, we wanted something between them, something that accounts for the second parameter as given. Again, we can find that by lerping between the intermediate points P & R. In this case we wanted to be 50% between them.
Here's a general illustration:
In terms of code, you might have something like this:
static float Lerp(float a, float b, float t)
{
return a + t * (b - a);
}
static PointF Lerp(PointF a, PointF b, float t)
{
return new PointF(Lerp(a.X, b.X, t), Lerp(a.Y, b.Y, t));
}
static PointF PointInQuad(PointF t, PointF a, PointF b, PointF c, PointF d)
{
PointF p = Lerp(a, b, t.X);
PointF q = Lerp(c, d, t.X);
return Lerp(p, q, t.Y);
}