C语言怎样显示一张图片?

C语言怎样显示一张图片?,第1张

1、如果有图片(例如 wzzx.jpg) 程序中插一句:

system("mspaint wzzx.jpg") 就可以 在运行时显示这张图片。

用字符串变量调用也可以:

char pic_name[80]="wzzx.jpg"

char cmd[100]

sprintf(cmd,"mspaint %s",pic_name)

system(cmd) // 显示图片

2、system函数

原型:int system(const char * command);

功能:执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名

说明:在windows系统中,system函数直接在控制台调用一个command命令。在Linux/Unix系统中,system函数会调用fork函数产生子进程,由子进程来执行command命令,命令执行完后随即返回原调用的进程;

头文件:stdlib.h;

返回值:命令执行成功返回0,执行失败返回-1。

如果要显示图片,关键是要了解这些存储格式的内容和含义,

用函数initgraphs(int

vmode)完成(也就是利用bios中的int

10中断来实现),

主要要把色表(color

map)按bmp格式添好,就ok了!有关图象格式的内容要查相关内容,

其中还要涉及显卡内部的寄存器有关知识。

所以比较复杂

lz  你好

c语言要显示bmp位图需要使用win32的api , 具体如下:

BOOL BitBlt(

  HDC hdcDest, // 位图显示目标设备环境中

  int nXDest,  // 位图显示在客户区的x坐标

  int nYDest,  // 位图显示在客户区的y坐标

  int nWidth,  // 位图显示的宽度

  int nHeight, // 位图显示的长度

  HDC hdcSrc,  // 源设备环境(包含需要显示的bmp位图)

  int nXSrc,   // 在当前位图中显示的开始x位置

  int nYSrc,   // 在当前位图中显示的开始y位置

  DWORD dwRop  // 映射模式

)

以下是源代码:

//显示bmp位图

#include<windows.h>

#include"resource.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)

void DrawBrick() 

int WINAPI WinMain(HINSTANCE hInstance,

   HINSTANCE hPrevInstance,

                   PSTR szCmdLine,

   int iCmdShow)

{

static TCHAR szAppName[] = TEXT("Bmp")

HWND hwnd

MSG msg

WNDCLASS wndclass

wndclass.style = CS_HREDRAW | CS_VREDRAW

wndclass.lpfnWndProc = WndProc

wndclass.cbClsExtra = 0

wndclass.cbWndExtra = 0

wndclass.hInstance = hInstance

wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION)

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW)

wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH)

wndclass.lpszMenuName = NULL

wndclass.lpszClassName = szAppName

if(!RegisterClass(&wndclass))

{

MessageBox(NULL, TEXT("This program requires Windows NT!"),

szAppName, MB_ICONERROR)

return 0

}

hwnd = CreateWindow(szAppName,

TEXT("Bmp Demo"),

WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,

CW_USEDEFAULT,

754,

566,

NULL,

NULL,

hInstance,

NULL)

ShowWindow(hwnd, iCmdShow)

UpdateWindow(hwnd)

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

{

TranslateMessage(&msg)

DispatchMessage(&msg)

}

return msg.wParam

}

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

{

static HBITMAP hBitmap //位图句柄  标示位图

static int cxBitmap, cyBitmap //位图的长宽

BITMAP bitmap

HDC hdc, hdcMem

HINSTANCE hInstance

PAINTSTRUCT ps

switch(message)

{

case WM_CREATE:

hInstance = ((LPCREATESTRUCT)lParam)->hInstance //获取窗口的实例句柄

hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1)) //将位图加载到内存中

GetObject(hBitmap, sizeof(BITMAP), &bitmap)

cxBitmap = bitmap.bmWidth//获取位图的长

cyBitmap = bitmap.bmHeight//获取位图的宽

return 0 

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps)

hdcMem = CreateCompatibleDC(hdc)//创建一个兼容于hdc设备环境描述表的hdcMem  主要是用于在内存中截图

SelectObject(hdcMem, hBitmap)   //将位图选到hdcMem中

BitBlt(hdc, -1, -1, cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY)//绘制bmp位图

DeleteDC(hdcMem)

EndPaint(hwnd, &ps)

return 0

case WM_DESTROY:

DeleteObject(hBitmap)

PostQuitMessage(0)

return 0

}

return DefWindowProc(hwnd, message, wParam, lParam)

}

程序运行效果:

希望能帮助你哈

ps:

附件是整个工程 , 用vs2008创建的项目 , 里面包含相应资源


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8082667.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存