SDL之读取bmp图片

SDL的代码不难理解,看下这个基本的SDL的流程,就明白了个大概
在这里插入图片描述在这里插入图片描述在这里插入图片描述见代码

	#include "SDL.h"
    int main(int argc, char* argv[])
    {
    	SDL_Init(SDL_INIT_VIDEO);
    	SDL_Window* window = SDL_CreateWindow("Tutorial", 100, 100,
    		600, 600, SDL_WINDOW_SHOWN);
    	
    	SDL_Surface* surface = SDL_GetWindowSurface(window);
    	SDL_Surface* picture = SDL_LoadBMP("C:\\Users\\xxxx\\Desktop\\1.bmp");
    
    	SDL_BlitSurface(picture, NULL, surface,NULL);
    	SDL_UpdateWindowSurface(window);
    	
    	SDL_Delay(4000);
    	SDL_FreeSurface(picture);
    	SDL_FreeSurface(surface);
    	SDL_DestroyWindow(window);
    	SDL_Quit();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
读取BMP图片并在屏幕上显示,你可以使用以下步骤: 1. 打开BMP文件并读取文件头和图像数据。 2. 根据文件头中的信息,计算图像的宽度和高度,并分配足够的内存来存储图像数据。 3. 读取图像数据并将其存储到内存中。 4. 使用图像数据创建一个UI图像对象。 5. 将UI图像对象显示在屏幕上。 以下是一个简单的示例代码,仅供参考: ```c++ #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <SDL2/SDL.h> #pragma pack(push, 1) struct bmp_file_header { uint16_t type; // 文件类型,必须为 "BM" uint32_t size; // 文件大小,字节为单位 uint16_t reserved1; // 保留字段1 uint16_t reserved2; // 保留字段2 uint32_t offset; // 位图数据的起始位置,字节为单位 }; struct bmp_info_header { uint32_t size; // 信息头的大小,字节为单位 int32_t width; // 图像的宽度,像素为单位 int32_t height; // 图像的高度,像素为单位 uint16_t planes; // 目标设备的位平面数,恒为1 uint16_t bit_count; // 每个像素的位数,一般为24 uint32_t compression; // 压缩方式,一般为0 uint32_t size_image; // 图像数据的大小,字节为单位,一般为0 int32_t x_pels_per_meter; // 水平方向上每米像素数 int32_t y_pels_per_meter; // 垂直方向上每米像素数 uint32_t clr_used; // 颜色索引数,0表示使用所有的颜色索引 uint32_t clr_important; // 重要的颜色索引数,0表示所有的颜色都重要 }; #pragma pack(pop) int read_bmp_file(const char* filename, uint8_t** data, int* width, int* height) { FILE* fp = fopen(filename, "rb"); if (fp == NULL) { return -1; } bmp_file_header file_header; fread(&file_header, sizeof(file_header), 1, fp); if (file_header.type != 0x4D42) { fclose(fp); return -2; } bmp_info_header info_header; fread(&info_header, sizeof(info_header), 1, fp); if (info_header.bit_count != 24) { fclose(fp); return -3; } *width = info_header.width; *height = info_header.height; *data = (uint8_t*)malloc(info_header.width * info_header.height * 3); fseek(fp, file_header.offset, SEEK_SET); fread(*data, info_header.width * info_header.height * 3, 1, fp); fclose(fp); return 0; } int main(int argc, char* argv[]) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "SDL_Init failed: %s\n", SDL_GetError()); return -1; } uint8_t* data = NULL; int width = 0, height = 0; if (read_bmp_file("test.bmp", &data, &width, &height) != 0) { fprintf(stderr, "read_bmp_file failed\n"); return -2; } SDL_Window* window = SDL_CreateWindow("BMP Viewer", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_SHOWN); if (window == NULL) { fprintf(stderr, "SDL_CreateWindow failed: %s\n", SDL_GetError()); free(data); return -3; } SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (renderer == NULL) { fprintf(stderr, "SDL_CreateRenderer failed: %s\n", SDL_GetError()); SDL_DestroyWindow(window); free(data); return -4; } SDL_Texture* texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB24, SDL_TEXTUREACCESS_STREAMING, width, height); if (texture == NULL) { fprintf(stderr, "SDL_CreateTexture failed: %s\n", SDL_GetError()); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); free(data); return -5; } SDL_UpdateTexture(texture, NULL, data, width * 3); SDL_RenderCopy(renderer, texture, NULL, NULL); SDL_RenderPresent(renderer); SDL_Event event; while (SDL_WaitEvent(&event)) { if (event.type == SDL_QUIT) { break; } } SDL_DestroyTexture(texture); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); free(data); SDL_Quit(); return 0; } ``` 这个示例使用SDL显示BMP图像,使用了一个简单的BMP文件解析器来读取图像数据。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值