最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++針對bmp格式解析實例

 更新時間:2014年10月15日 09:12:56   投稿:shichen2014  
這篇文章主要介紹了C++針對bmp格式解析實例,設計CWnd框架的使用及位圖的操作,需要的朋友可以參考下

本文實例講述了C++針對bmp格式解析的方法,分享給大家供大家參考。具體方法如下:

寫這代碼時,容易出現(xiàn)如下錯誤:
1. 忘了on_wm_paint()  一直在界面上畫不出來
2. 正確寫法

復制代碼 代碼如下:
BYTE* pBits = (BYTE*)lpBase + pbitmapFileHeader->bfOffBits;

寫成了 

復制代碼 代碼如下:
BYTE* pBits =  pbitmapFileHeader->bfOffBits;

這里主要是用了前面一篇中的CWnd框架。

.cpp源文件如下:

復制代碼 代碼如下:
#include "ReadBMP.h" 
#include "resource.h" 
#include <afxdlgs.h > 
 
CMyApp theApp; 
BOOL CMyApp::InitInstance() 

    m_pMainWnd = new CMainWindow; 
    m_pMainWnd->ShowWindow(m_nCmdShow); 
    return TRUE; //必須返回TRUE,否則不會進入消息循環(huán),界面會直接退出 

 
//CMainWindow 
BEGIN_MESSAGE_MAP(CMainWindow, CWnd) 
ON_WM_CREATE() 
ON_WM_PAINT() 
ON_COMMAND(IDC_OPEN, OnOpen) 
END_MESSAGE_MAP() 
//構(gòu)造函數(shù) 
CMainWindow::CMainWindow() 

    LPCTSTR lpszClassName = ::AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW, ::LoadCursorA(NULL, IDC_ARROW), (HBRUSH)(COLOR_3DFACE+1), theApp.LoadIcon(IDI_MAIN)); 
    CreateEx(WS_EX_CLIENTEDGE, lpszClassName, "xxx", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL); 

//析構(gòu)函數(shù) 
CMainWindow::~CMainWindow() 

 

//消息映射函數(shù) 
int CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) 

    //OutputDebugString("oncreate"); 
    CClientDC dc(this); 
    m_hMemDC = ::CreateCompatibleDC(dc); 
    m_nWidth = 0; 
    m_nHeight = 0; 
    //設置菜單 
    HMENU hMenu = ::LoadMenuA(theApp.m_hInstance, (LPCSTR)IDR_MENU); 
    ::SetMenu(m_hWnd, hMenu); 
    return 0; 

 
void CMainWindow::OnNcDestroy( ) 

    delete this; 

void CMainWindow::OnDestroy() 

     

void CMainWindow::OnPaint() 

    CPaintDC dc(this); 
    ::BitBlt(dc, 0, 0, m_nWidth, m_nHeight, m_hMemDC, 0, 0, SRCCOPY); 

void CMainWindow::OnOpen() 

    CFileDialog dlg(TRUE); 
    if (IDOK != dlg.DoModal()) 
    { 
        return; 
    } 
    HANDLE  hFile = ::CreateFile(dlg.GetPathName(), GENERIC_READ , FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    if (INVALID_HANDLE_VALUE == hFile) 
    { 
        return; 
    } 
    HANDLE  hFileMap = ::CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); 
    if (NULL == hFileMap) 
    { 
        return; 
    } 
    LPVOID lpBase = ::MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0); 
    if (NULL == lpBase) 
    { 
        return; 
    } 
    //從頭結(jié)構(gòu)中取三個信息:1.bfOffBits位圖數(shù)據(jù)在文件中的起始位置,2.m_nWidth圖像的寬,3.m_nHeight圖像的高 
    BITMAPFILEHEADER* pbitmapFileHeader; 
    BITMAPINFO* pbitmapInfo; 
    pbitmapFileHeader = (BITMAPFILEHEADER*)lpBase; 
    if (pbitmapFileHeader->bfType != MAKEWORD('B','M')) 
    { 
        MessageBox("not bmp"); 
        ::UnmapViewOfFile(lpBase); 
        ::CloseHandle(hFileMap); 
        ::CloseHandle(hFile); 
    } 
    //DWORD bfOffBits = pbitmapFileHeader->bfOffBits; 
    BYTE* pBits = (BYTE*)lpBase + pbitmapFileHeader->bfOffBits; 
    pbitmapInfo = (BITMAPINFO*)((BYTE*)lpBase + sizeof(BITMAPFILEHEADER)); 
    m_nWidth = pbitmapInfo->bmiHeader.biWidth; 
    m_nHeight = pbitmapInfo->bmiHeader.biHeight; 
    //顯示BMP文件到內(nèi)存設備 
    //得客戶區(qū)DC 
    CClientDC dc(this); 
    //創(chuàng)建與客戶區(qū)DC兼容的位圖 
    HBITMAP hBitmap = ::CreateCompatibleBitmap(dc, m_nWidth, m_nHeight); 
    if (hBitmap == 0) 
    { 
        return; 
    } 
    //位圖選入內(nèi)存DC 
    ::SelectObject(m_hMemDC, hBitmap); 
 
    //圖像數(shù)據(jù)放到建立的DC中 
    ::SetDIBitsToDevice(m_hMemDC, 0, 0, m_nWidth, m_nHeight, 0, 0, 0, m_nHeight, pBits, pbitmapInfo, DIB_RGB_COLORS); 
 
    ::InvalidateRect(m_hWnd, NULL, TRUE); 
    ::DeleteObject(hBitmap); 
 
    ::UnmapViewOfFile(lpBase); 
    ::CloseHandle(hFileMap); 
    ::CloseHandle(hFile); 
 
}

.h頭文件如下:

復制代碼 代碼如下:
#include <afxwin.h> 
 
class CMyApp:public CWinApp 

public: 
    virtual BOOL InitInstance(); 
}; 
 
//CMainWindow 
class CMainWindow:public CWnd 

public: 
    CMainWindow(); 
    ~CMainWindow(); 
 
protected: 
    HDC m_hMemDC; //與客戶區(qū)兼容的內(nèi)存DC句柄  
    UINT m_nWidth; //BMP的寬度 
    UINT m_nHeight; //BMP的高度 
     
    //消息映射 
    afx_msg void OnNcDestroy( ); 
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 
    afx_msg void OnDestroy( ); 
    afx_msg void OnOpen(); 
    afx_msg void OnPaint(); 
    DECLARE_MESSAGE_MAP() 
};

希望本文所述對大家的C++程序設計有所幫助。

相關(guān)文章

  • C++中如何使用引用避免內(nèi)存復制

    C++中如何使用引用避免內(nèi)存復制

    C++引用是一種強大的工具,可以避免在函數(shù)調(diào)用過程中發(fā)生的常見內(nèi)存復制問題,本文主要介紹了C++中如何使用引用避免內(nèi)存復制,感興趣的可以了解一下
    2023-10-10
  • 嵌入式C實戰(zhàn)項目開發(fā)技巧:對一個有規(guī)律的數(shù)組表進行位移操作的方法

    嵌入式C實戰(zhàn)項目開發(fā)技巧:對一個有規(guī)律的數(shù)組表進行位移操作的方法

    今天小編就為大家分享一篇關(guān)于嵌入式C實戰(zhàn)項目開發(fā)技巧:對一個有規(guī)律的數(shù)組表進行位移操作的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C++中replace()函數(shù)使用方法匯總

    C++中replace()函數(shù)使用方法匯總

    這篇文章主要介紹了C++中replace()函數(shù)使用方法匯總,在這篇文章中為大家詳細介紹C++ replace()函數(shù)的各種應用方式,希望朋友們可以從這里介紹的內(nèi)容充分掌握這一應用技巧
    2015-11-11
  • C++實現(xiàn)打地鼠游戲設計

    C++實現(xiàn)打地鼠游戲設計

    這篇文章主要為大家詳細介紹了C++實現(xiàn)打地鼠游戲設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 如何寫好C main函數(shù)的幾個注意事項

    如何寫好C main函數(shù)的幾個注意事項

    這篇文章主要介紹了如何寫好C main函數(shù)的幾個注意事項,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • C++右值引用與move和forward函數(shù)的使用詳解

    C++右值引用與move和forward函數(shù)的使用詳解

    為了支持移動操作,新標準引入了一種新的引用類型——右值引用(rvalue reference)。所謂右值引用就是必須綁定到右值的引用,這篇文章主要介紹了C++右值引用與move和forward的使用
    2022-08-08
  • C++中const應放在類型前還是后

    C++中const應放在類型前還是后

    之前遇到小伙伴問C++中const加在類型名前和變量名前的區(qū)別,今天給大家簡單分析下。
    2016-05-05
  • QT基于TCP網(wǎng)絡聊天室

    QT基于TCP網(wǎng)絡聊天室

    這篇文章主要為大家詳細介紹了QT基于TCP網(wǎng)絡聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • swift Character類型詳解及實例

    swift Character類型詳解及實例

    這篇文章主要介紹了 swift Character類型詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 淺析C語言中typeof關(guān)鍵字用法

    淺析C語言中typeof關(guān)鍵字用法

    typeof關(guān)鍵字是C語言中的一個新擴展。在linux內(nèi)核源代碼中廣泛使用。接下來通過本文給大家分享C語言中typeof關(guān)鍵字用法,需要的朋友參考下
    2017-02-02

最新評論

柘荣县| 乌兰察布市| 嘉兴市| 金溪县| 安塞县| 沙洋县| 临邑县| 长子县| 利川市| 柳州市| 新余市| 宾川县| 信阳市| 广饶县| 盐城市| 衡东县| 兖州市| 逊克县| 磐安县| 海伦市| 化德县| 彭水| 黄平县| 光山县| 始兴县| 武陟县| 手游| 海原县| 石景山区| 苏尼特左旗| 容城县| 田阳县| 桐城市| 琼结县| 阿坝县| 缙云县| 南岸区| 白玉县| 甘孜| 沾化县| 达拉特旗|