上次感谢谢鼹鼠大哥的指点,我使用D3DXCreateTextureFromFileEx这个函数可以
使图片的关键色变成透明,但是现在又遇到一个问题,如果我想将图片放大,使用缩放矩
阵,没有问题,但是如果想要缩小就不行了,代码如下:
void Init(){ D3DXCreateSprite( g_pDevice, &g_pSprite ); //D3DXCreateTextureFromFile(g_pDevice,_T("banana.bmp"),&g_pTexture);//用这个函数就没问题,但我不想用这个函数 D3DXCreateTextureFromFileEx(g_pDevice, //D3D设备对象 "banana.bmp", // 载入图片的地址 D3DX_DEFAULT, // 图片的宽, D3DX_DEFAULT, // 图片的高 D3DX_DEFAULT, // 图片的miplevels 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0xff000000, // 关键颜色值(黑色), 将载入的图片里面的关键颜色值设置为透明色 NULL, //记录载入图片的信息 NULL, //记录载入调色板的信息 &g_pTexture); // 用来储存载入图片的纹理对象实例 }
void Render(){ g_pDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,255),1.0f,0); g_pDevice->BeginScene(); if ( SUCCEEDED( g_pSprite->Begin(D3DXSPRITE_ALPHABLEND) ) ) //D3DXSPRITE_ALPHABLEND { D3DXMATRIX scaleMatrix; D3DXVECTOR3 m_scale; m_scale.x=1.6f; m_scale.y=1.6f; m_scale.z=0.f; ////放缩图片 D3DXMatrixScaling(&scaleMatrix, m_scale.x,m_scale.y,m_scale.z);
// 设置图片大小位置的转换 g_pSprite->SetTransform(&scaleMatrix); g_pSprite->Draw(g_pTexture, NULL, NULL, NULL,D3DCOLOR_RGBA(255,255,255,255)); g_pSprite->End(); } g_pDevice->EndScene(); g_pDevice->resent(NULL,NULL,NULL,NULL); }
此处使用放大,一点问题都没有,但如果将m_scale的参数设为0.6缩小的话,就会产生问题,一个问题是会裁剪图片上的一部分
另一个问题是会产生重影,不知有谁遇到过没啊
|