I probably wouldn’t reach for the Grid class myself I would probably write something like this…
void draw9PatchImage (juce::Graphics& g,
const juce::Image& image,
const juce::Rectangle<int>& dstRect,
const juce::BorderSize<int>& border)
{
const auto srcRect = image.getBounds();
const auto srcMiddleRect = border.subtractedFrom (srcRect);
const auto dstMiddleRect = border.subtractedFrom (dstRect);
// top left corner
g.drawImage (image,
dstRect.getX(), dstRect.getY(), border.getLeft(), border.getTop(),
srcRect.getX(), srcRect.getY(), border.getLeft(), border.getTop());
// top right corner
g.drawImage (image,
dstMiddleRect.getRight(), dstRect.getY(), border.getRight(), border.getTop(),
srcMiddleRect.getRight(), srcRect.getY(), border.getRight(), border.getTop());
// bottom left corner
g.drawImage (image,
dstRect.getX(), dstMiddleRect.getBottom(), border.getLeft(), border.getBottom(),
srcRect.getX(), srcMiddleRect.getBottom(), border.getLeft(), border.getBottom());
// bottom right corner
g.drawImage (image,
dstMiddleRect.getRight(), dstMiddleRect.getBottom(), border.getRight(), border.getBottom(),
srcMiddleRect.getRight(), srcMiddleRect.getBottom(), border.getRight(), border.getBottom());
// top bar
g.drawImage (image,
dstMiddleRect.getX(), dstRect.getY(), dstMiddleRect.getWidth(), border.getTop(),
srcMiddleRect.getX(), srcRect.getY(), srcMiddleRect.getWidth(), border.getTop());
// bottom bar
g.drawImage (image,
dstMiddleRect.getX(), dstMiddleRect.getBottom(), dstMiddleRect.getWidth(), border.getBottom(),
srcMiddleRect.getX(), srcMiddleRect.getBottom(), srcMiddleRect.getWidth(), border.getBottom());
// left bar
g.drawImage (image,
dstRect.getX(), dstMiddleRect.getY(), border.getLeft(), dstMiddleRect.getHeight(),
srcRect.getX(), srcMiddleRect.getY(), border.getLeft(), srcMiddleRect.getHeight());
// right bar
g.drawImage (image,
dstMiddleRect.getRight(), dstMiddleRect.getY(), border.getRight(), dstMiddleRect.getHeight(),
srcMiddleRect.getRight(), srcMiddleRect.getY(), border.getRight(), srcMiddleRect.getHeight());
// middle
g.drawImage (image,
dstMiddleRect.getX(), dstMiddleRect.getY(), dstMiddleRect.getWidth(), dstMiddleRect.getHeight(),
srcMiddleRect.getX(), srcMiddleRect.getY(), srcMiddleRect.getWidth(), srcMiddleRect.getHeight());
}