C SDL2 - 选择图像的一部分然后放大

时间:2018-05-24 23:33:07

标签: c zoom sdl sdl-2

所以,我有一张用SDL2在窗口中打开的图像。我想为图像实现一个缩放功能,如下所示:我点击图像的两个点,然后我创建一个矩形,将这些点作为对角。然后我复制矩形并更新窗口以显示我选择的图像部分,这个新图像的宽度和高度比我选择的矩形更大,因为它将是整个窗口的高度和宽度。 我可以检测到鼠标点击,并通过鼠标点击计算x和y坐标中矩形的左上角。但是,我不知道如何复制这些矩形中的像素,也不知道如何使窗口显示放大的部分。我一直在谷歌搜索,但我不知道使用什么功能或如何编码我自己的。我该怎么写这样的函数?

这是我到目前为止所拥有的。我希望能够放大的图像是“map.jpg”

SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = NULL;
window = SDL_CreateWindow("WarmingUp", TOP_LEFT_CORNER_X,
                          TOP_LEFT_CORNER_Y, IMAGE_WIDTH, IMAGE_HEIGHT, 0);
if(window == NULL){
    printf("Erro a abrir janela gráfica\n");
    exit(EXIT_FAILURE);
}

SDL_Renderer *renderer = NULL;
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if (renderer == NULL){
    printf("Erro a criar renderer\n");
    exit(EXIT_FAILURE);
}

SDL_Surface *jpgSurface = NULL;
jpgSurface = IMG_Load("map.jpg");
if(jpgSurface == NULL){
    printf("Erro a abrir imagem\n");
    exit(EXIT_FAILURE);
}
SDL_Texture *jpgTexture = NULL;
jpgTexture = SDL_CreateTextureFromSurface(renderer, jpgSurface);
if(jpgTexture == NULL){
    printf("Erro a criar superfície através de imagem\n");
    exit(EXIT_FAILURE);
}
SDL_FreeSurface(jpgSurface);
SDL_Event e;
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, jpgTexture, NULL, NULL);    
while(!quit){
    while(SDL_PollEvent(&e)){
        if(e.type == SDL_QUIT)
            quit = 1;

        SDL_RenderPresent(renderer);
        SDL_Delay(15);
SDL_DestroyTexture(jpgTexture);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();

我知道要在while &eventloop进行鼠标互动,我需要检查if ( event.type == SDL_MOUSEBUTTONUP ),我还可以向您展示计算所需左上角x和y位置的代码要裁剪的矩形,但我真的不能再进一步了。

1 个答案:

答案 0 :(得分:0)

以下是来自问题的修改代码:

while( $row = sqlsrv_fetch_array...

在keypress事件处理程序中,它创建第二个窗口/渲染器/纹理(不是它的最佳位置),稍后它会渲染第二个窗口(如果存在)。