#include <SDL.h>
#include <SDL_image.h>
#include <stdio.h>

int main(int argc, char* argv[]) {
// Инициализация SDL
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("Ошибка инициализации SDL: %s\n", SDL_GetError());
return 1;
}

// Инициализация SDL_image
if (!(IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG)) {
    printf("Ошибка инициализации SDL_image: %s\n", IMG_GetError());
    SDL_Quit();
    return 1;
}

// Создание окна с возможностью изменения размера
SDL_Window* window = SDL_CreateWindow("Отображение изображения",
                                      SDL_WINDOWPOS_CENTERED,
                                      SDL_WINDOWPOS_CENTERED,
                                      800, 600,
                                      SDL_WINDOW_RESIZABLE);
if (!window) {
    printf("Ошибка создания окна: %s\n", SDL_GetError());
    IMG_Quit();
    SDL_Quit();
    return 1;
}

// Создание рендерера
SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (!renderer) {
    printf("Ошибка создания рендерера: %s\n", SDL_GetError());
    SDL_DestroyWindow(window);
    IMG_Quit();
    SDL_Quit();
    return 1;
}

// Загрузка изображения
SDL_Surface* imageSurface = IMG_Load("../Maps/world/provinces.png");
if (!imageSurface) {
    printf("Ошибка загрузки изображения: %s\n", IMG_GetError());
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    IMG_Quit();
    SDL_Quit();
    return 1;
}

// Создание текстуры из поверхности изображения
SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, imageSurface);
SDL_FreeSurface(imageSurface); // Освобождение поверхности
if (!texture) {
    printf("Ошибка создания текстуры: %s\n", SDL_GetError());
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    IMG_Quit();
    SDL_Quit();
    return 1;
}

// Получение размеров изображения
int imageWidth, imageHeight;
SDL_QueryTexture(texture, NULL, NULL, &imageWidth, &imageHeight);

// Размеры камеры (начальные)
float camX = 0, camY = 0;
float camW = imageWidth - 1;
float camH = imageHeight - 1;

// Основной цикл приложения
int running = 1;
while (running) {
    SDL_Event event;
    // Обработка событий
    while (SDL_PollEvent(&event)) {
        if (event.type == SDL_QUIT) {
            running = 0;
        } else if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
            // При изменении размера окна можно обновить камеру, если необходимо
        }
    }

    // Получение размеров окна
    int windowWidth, windowHeight;
    SDL_GetWindowSize(window, &windowWidth, &windowHeight);

    // Вычисление размеров камеры с сохранением пропорций и ограничением по размерам изображения
    float windowAspect = (float)windowWidth / (float)windowHeight;

    // Камера должна быть меньше изображения по любой из сторон
    float maxCamW = imageWidth - 1;
    float maxCamH = imageHeight - 1;

    float camAspect = windowAspect;

    // Попытка установить камеру на основе ширины
    camW = maxCamW;
    camH = camW / camAspect;

    if (camH >= maxCamH) {
        // Если высота камеры выходит за пределы, то корректируем на основе высоты
        camH = maxCamH;
        camW = camH * camAspect;
    }

    // Проверяем, чтобы камера была меньше размеров изображения
    if (camW >= maxCamW) {
        camW = maxCamW;
    }
    if (camH >= maxCamH) {
        camH = maxCamH;
    }

    // Центрируем камеру на изображении
    camX = (imageWidth - camW) / 2;
    camY = (imageHeight - camH) / 2;

    SDL_Rect srcRect = { (int)camX, (int)camY, (int)camW, (int)camH };
    SDL_Rect destRect = { 0, 0, windowWidth, windowHeight };

    // Очистка рендерера
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // Черный фон
    SDL_RenderClear(renderer);

    // Отрисовка текстуры с масштабированием
    SDL_RenderCopy(renderer, texture, &srcRect, &destRect);

    // Обновление экрана
    SDL_RenderPresent(renderer);
}

// Освобождение ресурсов
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
IMG_Quit();
SDL_Quit();

return 0;

}

Напиши для этого кода код зума в файлах EditorCamera.c и .h. Зум должен быть плавным, уровень зума должен быть с типом float, чтобы камера не подстраивалась размером под пиксели карты(изображения). При прокрутке колесика мыши вверх камера приближается, при прокрутке вниз отдаляется. Камера при зуме не должна выходить за границы изображение(карты). Не изменяй логику изменения размера окна