Я пытаюсь использовать этот код для увеличения изображений в SDL2. Я хочу, чтобы изображение оставалось по центру при масштабировании, но я не могу понять это (я пробовал несколько методов, и этот пока выглядит лучше всего … но это мало что говорит)
void Image::drawFlat(SDL_Renderer* renderer, int x, int y, float scaleWidth, float scaleHeight) {
if(this->position.x != x || this->position.y != y || this->scaleWidth != scaleWidth || this->scaleHeight != scaleHeight) {
SDL_QueryTexture(this->imageCache, NULL, NULL, &this->position.w, &this->position.h);
this->position.x = (int) x - (this->position.w * scaleWidth + this->position.w) / 2;
this->position.y = (int) y - (this->position.h * scaleHeight + this->position.h) / 2;
this->position.w = (int) this->position.w * scaleWidth;
this->position.h = (int) this->position.h * scaleHeight;
this->scaleWidth = scaleWidth;
this->scaleHeight = scaleHeight;
SDL_RenderCopy(renderer, this->imageCache, NULL, &this->position);
}
}
Ты почти там. Вам просто нужно поменять два знака:
void Image::drawFlat(SDL_Renderer* renderer, int x, int y, float scaleWidth, float scaleHeight) {
if(this->position.x != x || this->position.y != y || this->scaleWidth != scaleWidth || this->scaleHeight != scaleHeight) {
SDL_QueryTexture(this->imageCache, NULL, NULL, &this->position.w, &this->position.h);
this->position.x = (int) x - (this->position.w * scaleWidth - this->position.w) / 2;
this->position.y = (int) y - (this->position.h * scaleHeight - this->position.h) / 2;
this->position.w = (int) this->position.w * scaleWidth;
this->position.h = (int) this->position.h * scaleHeight;
this->scaleWidth = scaleWidth;
this->scaleHeight = scaleHeight;
SDL_RenderCopy(renderer, this->imageCache, NULL, &this->position);
}
}
Демо онлайн (используйте стрелки для перемещения, numpad + и — для масштабирования ширины, [и] для масштабирования высоты)