#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, чтобы камера не подстраивалась размером под пиксели карты(изображения). При прокрутке колесика мыши вверх камера приближается, при прокрутке вниз отдаляется. Камера при зуме не должна выходить за границы изображение(карты)