Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 坑爹的图片转数组小程序.
- // 资源头
- # if RESOURCE_HPP
- //{{NO_DEPENDENCIES}}
- // Microsoft Visual C++ 生成的包含文件。
- // 供 ImgToArray.rc 使用
- //
- #define IDBT_LOAD 3
- #define IDD_MAIN 101
- #define IDET_IMG_PATH 1001
- #define IDET_IMG_WIDTH 1002
- #define IDET_IMG_HEIGHT 1003
- #define IDET_NEWPITCH 1004
- #define IDRD_D0RD8GD16B 1005
- #define IDRD_D0BD8GD16R 1006
- #define IDBT_SAVE 1007
- #define IDC_CHECK1 1008
- #define IDCK_BIN 1008
- // Next default values for new objects
- //
- #ifdef APSTUDIO_INVOKED
- #ifndef APSTUDIO_READONLY_SYMBOLS
- #define _APS_NEXT_RESOURCE_VALUE 102
- #define _APS_NEXT_COMMAND_VALUE 40001
- #define _APS_NEXT_CONTROL_VALUE 1009
- #define _APS_NEXT_SYMED_VALUE 101
- #endif
- #endif
- # endif
- // 资源脚本
- # if RESOURCE_SCRIPT
- // Microsoft Visual C++ generated resource script.
- //
- #include "resource.h"
- #define APSTUDIO_READONLY_SYMBOLS
- /////////////////////////////////////////////////////////////////////////////
- //
- // Generated from the TEXTINCLUDE 2 resource.
- //
- #include "afxres.h"
- /////////////////////////////////////////////////////////////////////////////
- #undef APSTUDIO_READONLY_SYMBOLS
- /////////////////////////////////////////////////////////////////////////////
- // 中文(简体,中国) resources
- #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
- LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
- #ifdef APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // TEXTINCLUDE
- //
- 1 TEXTINCLUDE
- BEGIN
- "resource.h\0"
- END
- 2 TEXTINCLUDE
- BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
- END
- 3 TEXTINCLUDE
- BEGIN
- "\r\n"
- "\0"
- END
- #endif // APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // Dialog
- //
- IDD_MAIN DIALOGEX 0, 0, 185, 103
- STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
- EXSTYLE WS_EX_PALETTEWINDOW
- CAPTION "ImgToRGB32Array"
- FONT 8, "MS Shell Dlg", 400, 0, 0x1
- BEGIN
- DEFPUSHBUTTON "Save...",IDBT_SAVE,117,50,50,14
- PUSHBUTTON "Cancel",IDCANCEL,117,67,50,14
- LTEXT "ImagePath",IDC_STATIC,17,14,41,9
- EDITTEXT IDET_IMG_PATH,65,15,101,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
- GROUPBOX "Infos",IDC_STATIC,7,3,172,95
- LTEXT "ImageWidth",IDC_STATIC,17,31,41,10
- EDITTEXT IDET_IMG_WIDTH,65,31,43,12,ES_MULTILINE | ES_AUTOHSCROLL | ES_WANTRETURN | WS_DISABLED | NOT WS_BORDER,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
- LTEXT "ImageHeight",IDC_STATIC,17,51,45,11
- EDITTEXT IDET_IMG_HEIGHT,65,50,43,12,ES_AUTOHSCROLL | WS_DISABLED,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
- LTEXT "NewPitch",IDC_STATIC,17,68,37,10
- EDITTEXT IDET_NEWPITCH,65,66,44,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
- DEFPUSHBUTTON "Load...",IDBT_LOAD,117,30,50,14
- CONTROL "D0RD16B",IDRD_D0RD8GD16B,"Button",BS_AUTORADIOBUTTON,15,82,43,8
- CONTROL "D0BD16R",IDRD_D0BD8GD16R,"Button",BS_AUTORADIOBUTTON,63,81,43,8
- CONTROL "bin",IDCK_BIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,113,83,38,10
- END
- /////////////////////////////////////////////////////////////////////////////
- //
- // DESIGNINFO
- //
- #ifdef APSTUDIO_INVOKED
- GUIDELINES DESIGNINFO
- BEGIN
- IDD_MAIN, DIALOG
- BEGIN
- END
- END
- #endif // APSTUDIO_INVOKED
- #endif // 中文(简体,中国) resources
- /////////////////////////////////////////////////////////////////////////////
- #ifndef APSTUDIO_INVOKED
- /////////////////////////////////////////////////////////////////////////////
- //
- // Generated from the TEXTINCLUDE 3 resource.
- //
- /////////////////////////////////////////////////////////////////////////////
- #endif // not APSTUDIO_INVOKED
- # endif
- // ====================================================================================
- # include <windows.h>
- # include <d3d9.h>
- # include <d3dx9.h>
- # include <assert.h>
- # include <tchar.h>
- # include <stdio.h>
- # include "resource.h"
- #pragma comment(linker,"\"/manifestdependency:type='win32' \
- name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
- processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
- namespace GlobalObjects {
- static IDirect3D9 *sm_Direct3D9_root = NULL;
- static IDirect3DDevice9 *sm_Direct3D9_devic = NULL;
- static IDirect3DTexture9 *sm_Surface9 = NULL;
- static int SettingsPitch = 0;
- };
- static void initGlobal (HWND hWindow) {
- D3DPRESENT_PARAMETERS d3dpp;
- GlobalObjects :: sm_Direct3D9_root = Direct3DCreate9 (D3D_SDK_VERSION);
- assert (GlobalObjects :: sm_Direct3D9_root != NULL);
- ZeroMemory (& d3dpp, sizeof (d3dpp));
- d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
- d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- d3dpp.Flags = 0;
- d3dpp.hDeviceWindow = hWindow;
- d3dpp.Windowed = TRUE;
- d3dpp.PresentationInterval = 0;
- d3dpp.BackBufferHeight = 128;
- d3dpp.BackBufferWidth = 128;
- HRESULT sig = GlobalObjects :: sm_Direct3D9_root->CreateDevice (0,
- D3DDEVTYPE_HAL,
- hWindow,
- D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, & GlobalObjects :: sm_Direct3D9_devic);
- assert (SUCCEEDED (sig));
- }
- static void uninitGlobal (void) {
- if ( GlobalObjects::sm_Surface9 != NULL) {
- GlobalObjects::sm_Surface9->Release ();
- GlobalObjects::sm_Surface9 = NULL;
- }
- if ( GlobalObjects::sm_Direct3D9_devic != NULL) {
- GlobalObjects::sm_Direct3D9_devic->Release ();
- GlobalObjects::sm_Direct3D9_devic = NULL;
- }
- if ( GlobalObjects::sm_Direct3D9_root != NULL) {
- GlobalObjects::sm_Direct3D9_root->Release ();
- GlobalObjects::sm_Direct3D9_root = NULL;
- }
- }
- INT_PTR CALLBACK DlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
- switch (message) {
- case WM_INITDIALOG:
- initGlobal (hDlg);
- EnableWindow ( GetDlgItem (hDlg, IDBT_SAVE), FALSE);
- SendMessage (GetDlgItem (hDlg, IDRD_D0BD8GD16R), BM_SETCHECK, BST_CHECKED, 0);
- break;
- case WM_COMMAND:
- switch(LOWORD(wParam)) {
- case IDBT_SAVE:
- {
- int n = GetDlgItemInt (hDlg, IDET_NEWPITCH, NULL, 0);
- int w = GetDlgItemInt (hDlg, IDET_IMG_WIDTH, NULL, 0);
- int h = GetDlgItemInt (hDlg, IDET_IMG_HEIGHT, NULL, 0);
- if (w*4 > n)
- {
- MessageBox (NULL, _T ("Pitch too small"), _T ("IMGTOARRAY"), MB_ICONERROR);
- return (INT_PTR) FALSE;
- }
- OPENFILENAME opfn;
- TCHAR strFilename[MAX_PATH];
- ZeroMemory(&opfn, sizeof(OPENFILENAME));
- opfn.lStructSize = sizeof(OPENFILENAME);//结构体大小
- opfn.nFilterIndex = 1;
- opfn.lpstrFile = strFilename;
- opfn.lpstrFile[0] = '\0';
- opfn.nMaxFile = sizeof(strFilename);
- opfn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
- if(GetSaveFileName(&opfn))
- {
- // 拷贝纹理为数组.
- BOOL D0isBlue = FALSE;
- BOOL doBin = FALSE;
- if ( SendMessage (GetDlgItem (hDlg, IDRD_D0BD8GD16R), BM_GETCHECK, 0, 0) == BST_CHECKED)
- D0isBlue = TRUE;
- if ( SendMessage (GetDlgItem (hDlg, IDCK_BIN), BM_GETCHECK, 0, 0) == BST_CHECKED)
- doBin = TRUE;
- // // Width:nn Height:nn Pitch:nn Format :
- // uint8_t nn = { 0xnn, 0xnn, ..};
- //
- FILE *fd_ = _tfopen (strFilename, _T ("wb"));
- assert (fd_ != NULL);
- if (doBin == FALSE)
- _ftprintf (fd_, _T ("// Width:%d Height:%d Pitch:%d Format:%s\nuint8_t image = { "),
- w, h, n, D0isBlue ? _T ("D0BD8GD16R") : _T ("D0GD8GD16B"));
- D3DLOCKED_RECT vdLock;
- GlobalObjects ::sm_Surface9->LockRect (0, & vdLock, NULL, D3DLOCK_DISCARD);
- DWORD *pm = (DWORD *)vdLock.pBits;
- DWORD pn = vdLock.Pitch >> 2;
- DWORD pnn = w * 4;
- union {
- BYTE min[4];
- DWORD big;
- } dumBlock;
- if (doBin == FALSE) {
- for (int y = 0; y != h; y++) {
- for (int x= 0; x != n; x++) {
- if (x >= pnn) {
- _ftprintf (fd_, _T ("0x00"));
- } else {
- // pitch内的像素.
- int b = x/4;
- int m = x &3;
- dumBlock.big = pm [b+y*vdLock.Pitch/4];
- if (D0isBlue == FALSE) {
- BYTE t = dumBlock.min[0];
- dumBlock.min[0] = dumBlock.min[2];
- dumBlock.min[2] = t;
- }
- _ftprintf (fd_, _T ("0x%02x"), dumBlock.min[m]);
- }
- if ( ! (x == (n - 1) && (y == h - 1))) {
- _ftprintf (fd_, _T (","));
- }
- }
- }
- _ftprintf (fd_, _T ("};"));
- } else {
- BYTE c = 0;
- for (int y = 0; y != h; y++) {
- for (int x= 0; x != n; x++) {
- if (x >= pnn) {
- c = 0;
- fwrite (& c, 1, 1, fd_);
- } else {
- // pitch内的像素.
- int b = x/4;
- int m = x &3;
- dumBlock.big = pm [b+y*vdLock.Pitch/4];
- if (D0isBlue == FALSE) {
- BYTE t = dumBlock.min[0];
- dumBlock.min[0] = dumBlock.min[2];
- dumBlock.min[2] = t;
- }
- fwrite (& dumBlock.min[m], 1, 1, fd_);
- }
- }
- }
- }
- GlobalObjects ::sm_Surface9->UnlockRect (0);
- fclose (fd_);
- }
- }
- break;
- case IDBT_LOAD: // 加载图片.
- {
- OPENFILENAME opfn;
- TCHAR strFilename[MAX_PATH];
- ZeroMemory(&opfn, sizeof(OPENFILENAME));
- opfn.lStructSize = sizeof(OPENFILENAME);//结构体大小
- opfn.nFilterIndex = 1;
- opfn.lpstrFile = strFilename;
- opfn.lpstrFile[0] = '\0';
- opfn.nMaxFile = sizeof(strFilename);
- opfn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
- if(GetOpenFileName(&opfn))
- {
- // 尝试读取纹理
- D3DXIMAGE_INFO infos;
- if (GlobalObjects ::sm_Surface9 != NULL) {
- GlobalObjects ::sm_Surface9->Release ();
- GlobalObjects ::sm_Surface9 = NULL;
- }
- if (FAILED ( D3DXCreateTextureFromFileEx (GlobalObjects ::sm_Direct3D9_devic, strFilename,
- D3DX_DEFAULT_NONPOW2,
- D3DX_DEFAULT_NONPOW2,
- D3DX_FROM_FILE,
- 0,
- D3DFMT_UNKNOWN,
- D3DPOOL_MANAGED,
- D3DX_DEFAULT, // D3DX_DEFAULT
- D3DX_DEFAULT, // D3DX_DEFAULT
- 0, //D3DCOLOR_XRGB (0, 0, 0),
- & infos, NULL, & GlobalObjects ::sm_Surface9)) )
- {
- MessageBox (NULL, _T ("D3DXCreateTextureFromFileEx Failed"), _T ("IMGTOARRAY"), MB_ICONERROR);
- }
- else
- {
- SetDlgItemInt (hDlg, IDET_IMG_WIDTH, infos.Width, FALSE);
- SetDlgItemInt (hDlg, IDET_IMG_HEIGHT, infos.Height, FALSE);
- SetWindowText ( GetDlgItem (hDlg, IDET_IMG_PATH), strFilename);
- EnableWindow ( GetDlgItem (hDlg, IDBT_SAVE), TRUE);
- }
- }
- }
- break;
- case IDOK:
- case IDCANCEL:
- EndDialog (hDlg, IDCANCEL);
- break;
- }
- }
- return (INT_PTR) FALSE;
- }
- int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
- PSTR szCmdLine, int iCmdShow)
- {
- DialogBox (hInstance, MAKEINTRESOURCE (IDD_MAIN), NULL, DlgProc);
- uninitGlobal ();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement