Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Xin hướng dẫn cách load hình trong VS C++ sử dụng DirectX

  1. #1
    Ngày gia nhập
    12 2006
    Bài viết
    23

    Thumbs up Xin hướng dẫn cách load hình trong VS C++ sử dụng DirectX

    Mấy ngày nay mình gặp vấn đề này mà chưa giải quyết được. Mong được các bạn giúp đỡ.
    Nếu hướng dẫn kỹ 1 chút thì tốt quá. Cám ơn rất nhiều.

  2. #2
    Ngày gia nhập
    02 2008
    Bài viết
    9

    Mình cũng đang tập tành cái này. Vấn đề của bạn mình đã gặp và đã giải quyết được. Dưới đây là đoạn code hàm load hình mà mình đã dùng ( gọi ngay sau khi tạo 1 cửa sổ ứng dụng windows 640*480 )

    Code:
    int LoadImage_Init(HWND hWnd)
    {
    	HRESULT result;
    	
    	// Xác lập các thông số hiển thị của màn hình
    	D3DPRESENT_PARAMETERS d3dpp;
    	ZeroMemory(&d3dpp,sizeof(d3dpp));
    	d3dpp.Windowed = TRUE;
    	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    	d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
    	
    	// Tạo đối tượng Direct3D và kiểm tra đối tượng đó đã tạo thành công chưa
    	d3d = Direct3DCreate9(D3D_SDK_VERSION);
    	if(d3d == NULL)
    		return 0;
    
    	// Tạo đối tượng thiết bị hiển thị Direct3D và kiểm tra đối tượng đã tạo thành công chưa
    	d3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&d3ddev);
    	if(d3ddev == NULL)
    		return 0;
    
    	// Xóa bộ đệm về màu đen
    	d3ddev->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1,0);
    
    	// Lấy con trỏ bộ đệm
    	d3ddev->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&backbuffer);
    
    	// Tạo vùng nhớ trên hệ thống để chứa đối tượng hình họa (surface) 
    	result = d3ddev->CreateOffscreenPlainSurface(100,100,D3DFMT_X8R8G8B8,D3DPOOL_DEFAULT,&surface,NULL);
    	if(result != D3D_OK)
    	{
    		MessageBox(NULL,"1","error",MB_OK);
    		return 1;
    	}
    
    	// Tạo đối tượng hình họa (surface) từ file hình ảnh và kiểm tra đối tượng đã được tạo thành công chưa
    	result = D3DXLoadSurfaceFromFile(surface,NULL,NULL,"c.bmp",NULL,D3DX_DEFAULT,D3DCOLOR_XRGB(255,0,0),NULL);
    	if(result != D3D_OK)
    	{
    		MessageBox(NULL,"2","error",MB_OK);
    		return 1;
    	}
    
    	// Tạo biến lưu trữ vị trí của đối tượng hình họa
    	RECT rect;
    	rect.left = 100;
    	rect.right = rect.left + 100;
    	rect.top = 200;
    	rect.bottom = rect.top + 100;
    
    	// Sao chép toàn bộ dữ liệu offscreen surface vào bộ đệm
    	d3ddev->StretchRect(surface,NULL,backbuffer,&rect,D3DTEXF_NONE);
    
    	// Thể hiện hình ảnh từ bộ đệm lên màn hình
    	d3ddev->Present(NULL,NULL,NULL,NULL);
    
    	return 1;
    }

  3. #3
    Ngày gia nhập
    12 2006
    Bài viết
    23

    Cám ơn Longminhhai. Nhưng code của bạn là load hình lên 1 RECT. Ko biết có cách nào load hình trực tiếp lên form và có thể chỉnh chế độ transparency ko?

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    9

    Trích dẫn Nguyên bản được gửi bởi mysuncl Xem bài viết
    Cám ơn Longminhhai. Nhưng code của bạn là load hình lên 1 RECT. Ko biết có cách nào load hình trực tiếp lên form và có thể chỉnh chế độ transparency ko?
    Mình vẫn chưa hiểu load hình trực tiếp lên form là sao. Có phải là đưa lên như 1 hình nền ko? Nếu đưa lên như 1 hình nền thì mình nghĩ có thể làm như sau:

    Code:
    LPDIRECT3DSURFACE9 back;
    // tham số thứ 2 qui định màu hồng trong background.bmp là màu trong suốt
    back=LoadSurface("background.bmp",D3DCOLOR_XRGB(255,0,255))
    ...
    d3ddev->StretchRect(back,NULL,backbuffer,NULL,D3DTEXF_NONE);
    ...
    back->Release();
    Nhưng theo một tài liệu mình đọc được thì muốn load một image và chỉnh chế độ trong suốt một cách thực sự thì chỉ có cách dùng đối tượng SPRITE. Về phần này thì hơi dài dòng mà mình chưa nghiên cứu chính xác lắm!!!

  5. #5
    Ngày gia nhập
    12 2006
    Bài viết
    23

    Để mình nói rõ hơn. Nếu như trong C# thì có thể dùng hàm DrawImage để vẽ hình có sẵn lên form. Còn trong VS C++ thì mình chưa biết cách.

    Không phải đưa lên làm hình nền.

    Ngoài ra, ko biết làm cách nào để load từ 2 hình trở lên???
    Đã được chỉnh sửa lần cuối bởi mysuncl : 09-03-2008 lúc 03:39 PM.

Các đề tài tương tự

  1. Graphic Đổi màu trong DirectX với lập trình C#?
    Gửi bởi cutecat trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 24-03-2012, 10:36 AM
  2. xử lý amanion trong vc++ với DirectX
    Gửi bởi alisson trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 07-01-2011, 04:07 PM
  3. Load file .png trong DirectX
    Gửi bởi reddy trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 12
    Bài viết cuối: 23-10-2009, 08:20 PM
  4. Load 1 file anh khac bitmap bang directx
    Gửi bởi TuanAnh207 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 20-03-2009, 08:22 PM
  5. Load ảnh trong DirectX không được !
    Gửi bởi reddy trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 4
    Bài viết cuối: 14-11-2008, 04:30 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn