public bool HitTest(PointF point)
{
Matrix matrix = GetTrasformationMatrix();
PointF[] points = GetBitmapBoundary(matrix);
float minX = FindMinX(points);
float minY = FindMinY(points);
Matrix translateMatrix = new Matrix();
translateMatrix.Translate(-minX + Translate.Width - Width * ScalingFactor.Width / 2, -minY + Translate.Height - ScalingFactor.Height * Height / 2);
translateMatrix.TransformPoints(points);
PointF[] ptRect = new PointF[5];
Array.Copy(points, ptRect, 4);
ptRect[4] = ptRect[0];
bool isIn = false;
for (int j = 0, i = 1; i < 5; ++i, ++j)
{
if ((((ptRect[i].Y < point.Y) && (point.Y < ptRect[j].Y)) || ((ptRect[j].Y < point.Y)
&& (point.Y < ptRect[i].Y))) &&
(point.X < (ptRect[j].X - ptRect[i].X) * (point.Y - ptRect[i].Y) / (ptRect[j].Y -ptRect[i].Y) +ptRect[i].X))
{
isIn = !isIn;
}
}
return isIn;
}