首页 > 代码库 > [游戏学习29] Win32 图像处理1
[游戏学习29] Win32 图像处理1
>_<:bmp格式的简单处理:
>_<:变暗RGB同时除以某一值
>_<:出现轮廓的是通道相减
>_<:最后一个是颜色提取
>_<:头文件参见:http://www.cnblogs.com/zjutlitao/p/3733164.html
1 #include "stdafx.h" 2 #include "resourse.h" 3 4 #define MAX_LOADSTRING 100 5 6 // Global Variables: 7 HINSTANCE hInst; // current instance 8 TCHAR szTitle[MAX_LOADSTRING]; // The title bar text 9 TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text 10 HBITMAP bg,dra; 11 HDC mdc; 12 13 const int xstart=50; 14 const int ystart=20; 15 // Foward declarations of functions included in this code module: 16 ATOM MyRegisterClass(HINSTANCE hInstance); 17 BOOL InitInstance(HINSTANCE, int); 18 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 19 LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); 20 void MyPaint(HDC hdc); 21 //======================================================================================== 22 int APIENTRY WinMain(HINSTANCE hInstance, 23 HINSTANCE hPrevInstance, 24 LPSTR lpCmdLine, 25 int nCmdShow) 26 { 27 // TODO: Place code here. 28 MSG msg; 29 30 MyRegisterClass(hInstance);//调用函数向系统注册窗口类别,输入参数hInstance是目前运行程序的对象代码; 31 32 // 调用InitInstance函数,进行初始化操作; 33 if (!InitInstance (hInstance, nCmdShow)) 34 { 35 return FALSE; 36 } 37 38 // 消息循环(通过消息循环来获取信息, 39 //进行必要的键盘信息转换而后将控制权交给操作系统, 40 //有操作系统决定哪个程序的消息处理函数处理消息 41 while (GetMessage(&msg, NULL, 0, 0)) //获取程序消息 42 { 43 TranslateMessage(&msg);//转换伪码及字符 44 DispatchMessage(&msg);//将控制权交给系统,再有系统决定负责处理消息的程序; 45 } 46 47 return msg.wParam; 48 } 49 //===================================================================================== 50 51 52 53 //============================================================================================= 54 //在建立程序窗口实体之前,必须先定义一个窗口类别,其中包含所要建立窗口的信息, 55 //并向系统注册,这里的MyRegisterClass函数就是进行定义及注册窗口类别的函数。 56 //============================================================================================== 57 ATOM MyRegisterClass(HINSTANCE hInstance) 58 { 59 WNDCLASSEX wcex; //申请一个窗口类别“WNDCLASSEX”和结构”wcex“ 60 //-------------------------------------------------------------- 61 //定义vcex结构的各项信息,其中设定信息处理函数(lpfnWndProc) 62 //为WNDPROC,类别名称为(lpszClassName)为”fe"; 63 //-------------------------------------------------------------- 64 wcex.cbSize = sizeof(WNDCLASSEX); 65 66 wcex.style = CS_HREDRAW | CS_VREDRAW; 67 wcex.lpfnWndProc = (WNDPROC)WndProc; 68 wcex.cbClsExtra = 0; 69 wcex.cbWndExtra = 0; 70 wcex.hInstance = hInstance; 71 wcex.hIcon = NULL; 72 wcex.hCursor = NULL; 73 wcex.hCursor = LoadCursor(NULL,IDC_ARROW); 74 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 75 wcex.lpszMenuName = NULL; 76 wcex.lpszClassName = "fe"; 77 wcex.hIconSm = NULL; 78 79 return RegisterClassEx(&wcex);//调用RegisterClassEx函数注册类别,返回一个“ATOM"形态的字符串 80 //此字符串即为类别名称”fe"; 81 } 82 //============================================================================================ 83 84 85 //============================================================================================ 86 //按照前面所定义的窗口类别来建立并显示实际的程序窗口 87 //============================================================================================ 88 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 89 { 90 HWND hWnd; 91 HDC hdc; 92 hInst = hInstance; // 把instance handle 储存在全局变量中; 93 94 hWnd = CreateWindow("fe","绘图窗口",WS_OVERLAPPEDWINDOW, 95 CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); 96 //----------------------------------------------- 97 //调用CreateWindow函数来建立一个窗口对象 98 //第一个参数就是窗口建立依据的类别名称 99 //-----------------------------------------------100 if (!hWnd)101 {102 return FALSE;103 }104 //------------------------------------------------105 //设定窗口的位置及窗口的大小,然后绘制显示在设备上106 //-------------------------------------------------107 MoveWindow(hWnd,10,10,600,450,true);//位置及大小108 ShowWindow(hWnd, nCmdShow);//改定窗口显示时的状态109 UpdateWindow(hWnd);//将窗口绘制在显示设备上110 111 hdc=GetDC(hWnd);112 mdc=CreateCompatibleDC(hdc);113 114 BITMAP bm1;115 unsigned char *px1;116 117 bg=(HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,600,450,LR_LOADFROMFILE);//名、类型、大小、加载方式;118 GetObject(bg,sizeof(BITMAP),&bm1);119 px1=new unsigned char[bm1.bmHeight * bm1.bmWidthBytes];120 GetBitmapBits(bg,bm1.bmHeight*bm1.bmWidthBytes,px1);121 122 123 int xend,yend;124 int x,y,i;125 int rgb_b;126 int PxBytes=bm1.bmBitsPixel/8;127 128 129 for(y=0;y<(bm1.bmHeight);y++)130 {131 for(x=0;x<bm1.bmWidth;x++)132 {133 rgb_b=y*bm1.bmWidthBytes+x*PxBytes;134 135 if(px1[rgb_b]<160 && px1[rgb_b+1]<160 && px1[rgb_b+2]<160){136 px1[rgb_b+2]=0;137 px1[rgb_b+1]=0;138 px1[rgb_b]=0;139 }else{140 px1[rgb_b+2]=254;141 px1[rgb_b+1]=254;142 px1[rgb_b]=254;143 }144 }145 }146 147 SetBitmapBits(bg,bm1.bmHeight*bm1.bmWidthBytes,px1);148 149 MyPaint(hdc);150 151 ReleaseDC(hWnd,hdc);152 delete [] px1;153 154 return TRUE;155 }156 //============================================================================================157 158 159 //============================================================================================160 //161 //============================================================================================162 void MyPaint(HDC hdc)163 {164 SelectObject(mdc,bg);165 BitBlt(hdc,0,0,1366,768,mdc,0,0,SRCCOPY);//在窗口位置、大小、原图剪切位166 }167 //============================================================================================168 169 170 //============================================================================================171 //在前面定义类别的时候把WndProc定义为消息处理函数(当某些外部消息发生时,会按消息的类型172 //来决定该如何进行处理。此外该函数也是一个回叫函数(CALLBACK)(windows系统函数)每一个173 //程序都会接收信息,选择性接受、处理;174 //============================================================================================175 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)176 {177 PAINTSTRUCT ps;178 HDC hdc;179 180 switch (message) //判断消息类型181 {182 case WM_PAINT: //窗口重绘制183 hdc = BeginPaint(hWnd, &ps);184 MyPaint(hdc);185 EndPaint(hWnd, &ps);186 break;187 case WM_DESTROY: //处理窗口结束消息188 DeleteDC(mdc);189 DeleteObject(bg);190 PostQuitMessage(0);191 break;192 default:193 return DefWindowProc(hWnd, message, wParam, lParam);194 }195 return 0;196 }197 //============================================================================================
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。