c语言代码怎么显示图片和文字

在C语言中,显示图片和文字是较为复杂的任务。因为C语言本身并不直接支持图形处理和界面生成。因此,我们通常借助于第三方图形库来完成这些任务。例如,使用常见的SDL(Simple DirectMedia Layer)库,或者在Windows平台上利用WinAPI来实现图形界面的呈现。本文将分别介绍如何使用SDL库和WinAPI来显示图片和文字。

使用SDL库显示图片和文字

安装SDL库

首先,你需要在你的系统上安装SDL库。可以通过以下步骤来安装:

# For Linux

sudo apt-get install libsdl2-dev

# For Windows

# Download the development libraries from the SDL website and follow the instructions for installation

初始化SDL

在编写代码之前,你需要初始化SDL库并创建一个窗口。以下是初始化SDL和创建窗口的示例代码:

#include

#include

#include

#include

int main(int argc, char* args[]) {

// Initialize SDL

if (SDL_Init(SDL_INIT_VIDEO) < 0) {

printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());

return -1;

}

// Create window

SDL_Window* window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_SHOWN);

if (window == NULL) {

printf("Window could not be created! SDL_Error: %s\n", SDL_GetError());

return -1;

}

// Create renderer

SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

if (renderer == NULL) {

printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError());

return -1;

}

// Initialize SDL_image

if (!(IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG)) {

printf("SDL_image could not initialize! IMG_Error: %s\n", IMG_GetError());

return -1;

}

// Initialize SDL_ttf

if (TTF_Init() == -1) {

printf("SDL_ttf could not initialize! TTF_Error: %s\n", TTF_GetError());

return -1;

}

// Other code here...

// Destroy window and renderer

SDL_DestroyRenderer(renderer);

SDL_DestroyWindow(window);

// Quit SDL subsystems

TTF_Quit();

IMG_Quit();

SDL_Quit();

return 0;

}

加载并显示图片

接下来,你需要加载图片并将其显示在窗口中。你可以使用SDL_image库来处理图片的加载。以下是加载并显示图片的示例代码:

// Load image

SDL_Surface* loadedSurface = IMG_Load("path/to/your/image.png");

if (loadedSurface == NULL) {

printf("Unable to load image %s! SDL_image Error: %s\n", "path/to/your/image.png", IMG_GetError());

return -1;

}

// Create texture from surface

SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, loadedSurface);

if (texture == NULL) {

printf("Unable to create texture from %s! SDL Error: %s\n", "path/to/your/image.png", SDL_GetError());

return -1;

}

// Free the loaded surface

SDL_FreeSurface(loadedSurface);

// Clear screen

SDL_RenderClear(renderer);

// Render texture to screen

SDL_RenderCopy(renderer, texture, NULL, NULL);

// Update screen

SDL_RenderPresent(renderer);

// Wait for a few seconds

SDL_Delay(5000);

// Destroy texture

SDL_DestroyTexture(texture);

显示文字

显示文字需要使用SDL_ttf库。你需要加载字体,创建字体纹理并将其呈现在窗口中。以下是具体代码:

// Open the font

TTF_Font* font = TTF_OpenFont("path/to/your/font.ttf", 28);

if (font == NULL) {

printf("Failed to load font! SDL_ttf Error: %s\n", TTF_GetError());

return -1;

}

// Render text surface

SDL_Color textColor = {255, 255, 255, 255}; // White color

SDL_Surface* textSurface = TTF_RenderText_Solid(font, "Hello, SDL!", textColor);

if (textSurface == NULL) {

printf("Unable to render text surface! SDL_ttf Error: %s\n", TTF_GetError());

return -1;

}

// Create texture from surface

SDL_Texture* textTexture = SDL_CreateTextureFromSurface(renderer, textSurface);

if (textTexture == NULL) {

printf("Unable to create texture from rendered text! SDL Error: %s\n", SDL_GetError());

return -1;

}

// Free the text surface

SDL_FreeSurface(textSurface);

// Get the dimensions of the text

int textWidth = textSurface->w;

int textHeight = textSurface->h;

// Define where to render the text

SDL_Rect renderQuad = {100, 100, textWidth, textHeight}; // Position (100, 100)

// Clear screen

SDL_RenderClear(renderer);

// Render texture to screen

SDL_RenderCopy(renderer, textTexture, NULL, &renderQuad);

// Update screen

SDL_RenderPresent(renderer);

// Wait for a few seconds

SDL_Delay(5000);

// Destroy texture and close font

SDL_DestroyTexture(textTexture);

TTF_CloseFont(font);

使用WinAPI显示图片和文字

创建窗口

WinAPI是Windows操作系统提供的一组API,用于进行图形界面编程。首先我们需要创建一个窗口:

#include

// The main window procedure

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {

switch (msg) {

case WM_CLOSE:

DestroyWindow(hwnd);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd, msg, wParam, lParam);

}

return 0;

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {

// Window class structure

WNDCLASSEX wc;

ZeroMemory(&wc, sizeof(WNDCLASSEX));

wc.cbSize = sizeof(WNDCLASSEX);

wc.lpfnWndProc = WndProc;

wc.hInstance = hInstance;

wc.hCursor = LoadCursor(NULL, IDC_ARROW);

wc.hbrBackground = (HBRUSH)COLOR_WINDOW;

wc.lpszClassName = "WindowClass";

RegisterClassEx(&wc);

// Create window

HWND hwnd = CreateWindowEx(0, "WindowClass", "WinAPI Tutorial", WS_OVERLAPPEDWINDOW,

300, 300, 800, 600, NULL, NULL, hInstance, NULL);

ShowWindow(hwnd, nCmdShow);

// Main message loop

MSG msg;

while (GetMessage(&msg, NULL, 0, 0)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

显示图片

接下来,使用位图来显示图片。首先我们要加载位图并显示:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {

static HBITMAP hBitmap;

HDC hdc, hdcMem;

PAINTSTRUCT ps;

switch (msg) {

case WM_CREATE:

hBitmap = (HBITMAP)LoadImage(NULL, "path/to/your/image.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

if (hBitmap == NULL) {

MessageBox(hwnd, "Could not load image!", "Error", MB_OK | MB_ICONERROR);

return -1;

}

break;

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps);

hdcMem = CreateCompatibleDC(hdc);

SelectObject(hdcMem, hBitmap);

BitBlt(hdc, 0, 0, 800, 600, hdcMem, 0, 0, SRCCOPY);

DeleteDC(hdcMem);

EndPaint(hwnd, &ps);

break;

case WM_CLOSE:

DestroyWindow(hwnd);

break;

case WM_DESTROY:

DeleteObject(hBitmap);

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd, msg, wParam, lParam);

}

return 0;

}

显示文字

最后,我们可以使用TextOut函数来显示文字:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {

HDC hdc;

PAINTSTRUCT ps;

switch (msg) {

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps);

TextOut(hdc, 100, 100, "Hello, WinAPI!", strlen("Hello, WinAPI!"));

EndPaint(hwnd, &ps);

break;

case WM_CLOSE:

DestroyWindow(hwnd);

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd, msg, wParam, lParam);

}

return 0;

}

以上便是使用C语言显示图片和文字的方法,无论是通过SDL库还是WinAPI。通过上述的详细步骤和代码示例,相信你已经掌握了在不同平台上实现图片和文字显示的基本方法。希望这篇文章对你有所帮助。

后端开发标签