24/05/2018, 19:58

Đọc và hiển thị tập tin Bitmap

Viết chương trình theo minh hoạ dưới đây : Nút Browse dùng để chọn đường dẫn đến hình ảnh (Bitmap). Xem minh hoạ dưới đây : Nút Close dùng để thoát chương ...

Viết chương trình theo minh hoạ dưới đây :

Nút Browse dùng để chọn đường dẫn đến hình ảnh (Bitmap). Xem minh hoạ dưới đây :

Nút Close dùng để thoát chương trình

Picture Box dùng để hiển thị hình ảnh bitmap theo đường dẫn được chọn. TextBox hiển thị đường dẫn đến tập tin hình ảnh được chọn.

Thiết kế giao diện

  1. Mở Project mới dạng Dialog-based đặt tên Project là PictureDemo. (FileNewProjects). Chọn OK.

  2. Chọn Dialog based. Sau đó bấm Finish.

    Đối với Dialog :

    Đối với control PictureBox cũng chọn thực hiện tương tự và chọn giống như

    trong hình sau :

    Đặt ID cho textbox là IDC_FILENAME.

    Đặt biến (member variable) cho các control PictureBox(IDC_BITMAP) và TextBox(IDC_FILENAME) với các tên biến, tên lớp như hình trên.

FileDialog

Sử dụng lớp CFileDialog

Constructor của CFileDialog như sau :

Explicit CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL, DWORD dwSize = 0);
    

Các hàm khác có thể quan tâm : GetFileName, GetFileExt, GetFileTitle, GetFolderPath.

Hộp thoại Mở tập tin với CFileDialog:

CFileDialog OpenDlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,"Bitmap
    Files(*.bmp)|*.bmp||",this);
    if (OpenDlg.DoModal() == IDOK)
    {
      strPathName = OpenDlg.GetPathName();
       //Viết code tiếp ở đây
     }

Mở bitmap từ tập tin

Sử dụng hàm LoadImage:

HANDLE LoadImage( HINSTANCE hinst, LPCTSTR lpszName, UINT uType,int cxDesired, int cyDesired, UINT fuLoad };
    

Một ví dụ mở tập tin (mở tập tin Bitmap với tên là m_strFileName)

bmRead=(HBITMAP)LoadImage(NULL,m_strFileName,IMAGE_BITMAP, 0,0 , LR_LOADFROMFILE);
    

Viết code cho phần mở tập tin từ file

void CC4W6Dlg::OnOK()
    {
     // TODO: Add extra validation here
      CFileDialog
      OpenDlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,"Bitmap
      Files(*.bmp)|*.bmp||",this);
      CString strPathName;
      if (OpenDlg.DoModal() == IDOK)
        {
           strPathName = OpenDlg.GetPathName(); m_strFileName = strPathName; UpdateData(FALSE);
           HBITMAP bmRead;
           bmRead = (HBITMAP) LoadImage(NULL, m_strFileName, IMAGE_BITMAP, 0,0 , LR_LOADFROMFILE);
           if (bmRead != NULL)
             {
                //bmTemp.DeleteObject();
                m_Bitmap.SetBitmap(bmRead);
                //m_Bitmap là biến đại diện của control PictureBox
    
              }
         }
     }
Muốn tìm hiểu thêm chi tiết các hàm xem thêm trong MSDN.
0