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

Đề tài: Image Rotation

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    169

    Mặc định Image Rotation

    Mình dùng cái này để xoay ảnh 300x200 cũng được khoảng 62 fps! Nếu các bạn có cách nhanh hơn thì share cho mình với (vì xoay ảnh to hơn (cỡ 800x600) thì cũng còn chậm!)
    Code:
    	// struct Image32
    	//{
    	//	int Width,Height;
    	//	DWORD* pBits;	// Pixel aray
    	//};
    	// DWORD* m_pBits;	// Dest pixel array
    	BOOL RlRotate(Image32* pSrcImg32,double Degree,bool bUseAntialiasing = 0,bool bResizeSurface = 0)
    	{
    		// Rotate img of pImg32 and pass to m_pBits
    		if((!m_pBits && !bResizeSurface) || !pSrcImg32 || !pSrcImg32->pBits) return 0;
    		// Check degree
    		if(Degree == 0) return 1;	// Nothing to do
    		Degree = (Degree - int(Degree/360)*360);
    		if(Degree < 0) Degree = Degree + 360;
    		// Passing from dest to src
    		double cos = Cos(-Degree),sin = Sin(-Degree);
    		int MidX = m_Width >> 1,MidY = m_Height >> 1;
    		// Begin rotate
    		DWORD* Ptr = m_pBits;
    		double OffsetXX = -MidX*cos,OffsetXY = MidY*sin;
    		double OffsetYX = -MidX*sin,OffsetYY = MidY*cos;
    		double IncXX = OffsetXX,IncXY = OffsetXY;
    		double IncYX = OffsetXX,IncYY = OffsetYY;
    		int DestX = 0,DestY = 0;
    		for(int j = 0;j < m_Height;j++)
    		{
    			for(int i = 0;i < m_Width;i++)
    			{
    				DestX = int(MidX + IncXX + IncXY);// - CoorOffsetX;
    				DestY = int(MidY - IncYY + IncYX);// - CoorOffsetY;
    				// Prepare for next loop
    				IncXX += cos;
    				IncYX += sin;
    				// Check for valid src pixel pos
    				if(DestX < 0 || pSrcImg32->Width <= DestX || DestY < 0 || pSrcImg32->Height <= DestY) *Ptr++ = m_BkColor;
    				else *Ptr++ = pSrcImg32->pBits[DestY*pSrcImg32->Width + DestX];
    			}
    			IncXX = OffsetXX;	// Reset w
    			IncYX = OffsetYX;
    			IncXY -= sin;	// Inc h
    			IncYY -= cos;
    		}

  2. #2
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Bạn kiểm tra lại code, biến loop i và j không dùng tới ?

  3. #3
    Ngày gia nhập
    10 2007
    Bài viết
    169

    Dĩ nhiên là không dùng i và j trong code nhưng nếu không có i và j thì làm sao biết khi nào tăng IncXX,IncXY,IncYX,IncYY! Nói tóm lại là mình chỉ cho vòng lặp chạy từ (0,0) đến (m_Width,m_Height) ( tức là toàn bộ image) rồi tính các tọa độ của pixel tương ứng trên src image thôi!

  4. #4
    Ngày gia nhập
    08 2009
    Bài viết
    1

    co pac nao viet bang C# ko? em dang nhuc dau ve no wa.dih lam choi zui ma thay kho ghe.

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

  1. Lập trình C++ Cách nào so sánh 2 Image?
    Gửi bởi zenstorm trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 13-06-2013, 05:52 PM
  2. [WPF] Cách load Image vào Image control như thế nào?
    Gửi bởi cutithongtin trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 8
    Bài viết cuối: 12-05-2011, 09:54 PM
  3. Lưu và Hiển Thị Ảnh dưới dạng IMAGE
    Gửi bởi pvtam2a trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 06-01-2011, 10:57 AM
  4. Lấy một vùng image trong image
    Gửi bởi shinichith25 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 08-12-2010, 06:29 AM
  5. Image Rotation! Kỹ thuật xoay ảnh
    Gửi bởi RadicalLight trong diễn đàn Tutorials và Thủ thuật Visual C++
    Trả lời: 5
    Bài viết cuối: 22-03-2009, 10:23 AM

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