第一篇:實習總結報告
生 產習報
實 告
實習日程安排
我從2004.8到2004.11在這家公司公司進行實習。
1.剛開始的幾個星期,公司經(jīng)理安排我學習一些有關游戲方面的技術,幫我快速的對游戲行業(yè)入門。
2.接下來的時間,經(jīng)理安排我進行一些實戰(zhàn)開發(fā),難度從簡單到難。所進行開發(fā)的項目我會在實習收獲和體會這段中具體闡述。
實習收獲和體會
我在公司主要開發(fā)了一個圖形轉換器,制作一個InstallShiled安裝程序和關于3D處理的MMX技術,下面我將介紹我的工作情況和工作收獲。
一.圖形轉換器:
1.設計文檔
此軟件能將TGA,BMP等圖形格式轉換為任意制定的格式
功能細化:
1. 能顯示指定的圖片(TGA,RGBA等格式)
2. 能顯示指定圖片的參數(shù)(長度,寬度,圖片的格式)
3. 進行轉換的時候能檢查該圖片長,寬是否為2的冪次,如果不是則發(fā)出通知信息
4. 具有批處理功能,給定一個文件目錄,能將該目錄下的所有圖片轉換為DDS格式
5. 轉換為DDS時候可以指定MipMap值
一:功能描述:
二:模塊劃分: UI界面 + 轉換模塊
轉換模塊:以DLL的形式,針對不同的平臺各寫一個
其接口為:bool ChangeTo(const char* SrcName, const char* DestName,TYPE type)enum TYPE { BMP = 1, JPEG = 2, DDS = 3 };
const char* SrcName, const char* DestName 應該換成一個結構體 SrcName:指定的圖片名字 DestName: 轉換的圖片名字
UI界面:采取多文檔視圖結構 三:重要結構 struct DDS_PIXELFORMAT {
DWORD dwSize;
DWORD dwFlags;
DWORD dwFourCC;
DWORD dwRGBBitCount;
DWORD dwRBitMask;
DWORD dwGBitMask;
DWORD dwBBitMask;
DWORD dwABitMask;};
struct DDS_HEADER {
DWORD dwSize;
DWORD dwHeaderFlags;
DWORD dwHeight;
DWORD dwWidth;
DWORD dwPitchOrLinearSize;
DWORD dwDepth;
DWORD dwMipMapCount;
DWORD dwReserved1[11];
DDS_PIXELFORMAT ddspf;
DWORD dwSurfaceFlags;
DWORD dwCubemapFlags;
DWORD dwReserved2[3];};
四:開發(fā)平臺 VC6.0+DX9.0
2.接口文檔
接口說明
一 接口代碼:
class IImageChange { public: virtual bool ChangeTo(ImageInfo* pImageInfo)= 0;virtual char* GetDllName()= 0;virtual void SetDirectory(const char* szDirName)= 0;};
上面是一個接口類,這里模仿COM的方法,設計一個抽象類。任何Image Change DLL 必須繼承以上接口類。Example: class CImageChangeToDDS: public IImageChange { public: CImagaChangeToDDS();~CImageChangeToDDS();virtual bool ChangeTo(ImageInfo* pImageInfo);virtual char* GetDllName();virtual void SetDirectory(const char* szDirName);};
二 接口類成員函數(shù)說明:
virtual bool ChangeTo(ImageInfo* pImageInfo)= 0;該接口函數(shù)傳入一個ImageInfo結構的指針(ImageInfo是中間圖象數(shù)據(jù)類型,詳見《中間數(shù)據(jù)結構文檔》)。用戶可以在自己類中override該函數(shù),該函數(shù)可以按自己意愿任意轉換為自己想要的格式。
virtual char* GetDllName()= 0;該接口函數(shù)返回一個代表該該接口的字串,可以說明該接口類的功能和版本。
virtual void SetDirectory(const char* szDirName)= 0;該接口函數(shù)設置批處理轉換功能時的目的文件夾。
三 DLL說明:
DLL一共導出2個函數(shù): extern “C” { IImageChange* CreateInstance();}
extern “C” { void ReleaseInstance(IImageChange* pObj);} IImageChange* CreateInstance()產生一個派生自IimageChange的實例,該實例導入到應用程序進程中。
void ReleaseInstance(IImageChange* pObj);釋放從CreateInstance()產生的實例資源。
三 接口實現(xiàn)
#define FILENAMELEN 128 #define PALNUM 256
typedef unsigned char IMG_BYTE;typedef unsigned short IMG_WORD;typedef unsigned long IMG_DWORD;typedef long IMG_LONG;typedef bool IMG_BOOL;typedef DWORD IMG_ARGB;typedef void* IMG_LPVOID;
enum IMAGE_DATA_TYPE { //depth 32bit
IDT_A8R8G8B8 = 1,IDT_X8B8G8R8 = 2,//depth 24bit
IDT_R8G8B8 = 3,//depth 16bit
IDT_R5G6B5 = 4,IDT_X1R5G5B5 = 5,IDT_A4R4G4B4 = 6,IDT_X4R4G4B4 = 7,//depth 8bit
IDT_A1R2G3B2 = 8,IDT_R3G3B2 = 9,IDT_INDEX8 = 10,//depth 4bit
IDT_A1R1G1B1 = 11,IDT_X1R1G1B1
= 12,IDT_INDEX4 = 13,//depth 1bit
IDT_C1 = 14, // monochrome 0:BLACK 1:WHITE
IDT_INDEX1
= 15,IDT_UNKNOWN =-1, };
struct ImageHeader { IMG_DWORD dwSize;IMG_LONG lWidth;IMG_LONG lHeight;
IMG_BYTE bDepth;//象素的深度
IMG_BYTE bReserve1[3];
IMAGE_DATA_TYPE IDT_TYPE;
IMG_WORD wPlanes;//Must Be Zero IMG_WORD wReserve2;
IMG_DWORD dwReserve;//保留字,可以填充任意數(shù)據(jù),如:指向用戶分配的一段內存
IMG_DWORD dwPalClrNum;//調色板的顏色數(shù),如果為-1,則不存在調色板;若為1,4,8,16
//代表調色板的顏色總數(shù)
IMG_ARGB PalColors[PALNUM];//調色板的數(shù)據(jù),dwPalClrNum如果為-1,則該數(shù)據(jù)無效 };
struct ImageInfo { DWORD dwSize;LONG lOffset;//該結構與數(shù)據(jù)的偏移,以BYTE為單位
ImageHeader iiInfo;LPVOID* pData;};
轉換模塊:以DLL的形式,針對不同的平臺各寫一個
其接口為:bool ChangeImage(ImageHeader * pImageHeader)
3.中間數(shù)據(jù)格式說明
一 中間數(shù)據(jù)格式:
struct ImageInfo { DWORD dwSize;// ImageInfo結構大小
LONG lOffset;//該結構與數(shù)據(jù)的偏移,以BYTE為單位
TCHAR FileName[FILENAMELEN];//源圖形文件名
ImageHeader header;//圖形中間數(shù)據(jù)的頭信息
LONG lDataSize;//圖形的數(shù)據(jù)區(qū)大小
LPVOID pData;//圖形的數(shù)據(jù)區(qū)指針 };
struct ImageHeader { DWORD dwSize;// ImageHeader結構大小
LONG lWidth;//位圖的寬度, 單位:pixel LONG lHeight;//位圖的高度, 單位:pixel
WORD wDepth;//象素的深度,代表一個象素占多少位
WORD wReserve1;//Must Be Zero
IMAGE_DATA_TYPE IDT_TYPE;//位圖數(shù)據(jù)存儲類型
WORD wPlanes;//Must Be Zero WORD wReserve2;//Must Be Zero
DWORD dwReserve;//保留字,可以填充任意數(shù)據(jù),如:指向用戶分配的一段內存
DWORD dwPalClrNum;//調色板的顏色數(shù),如果為0,則不存在調色板;若為1,4,// 代表調色板的顏色總數(shù)
ARGB PalColors[PALNUM];//調色板的數(shù)據(jù)dwPalClrNum如果為0,則該數(shù)據(jù)無效
};enum IMAGE_DATA_TYPE {
//depth 32bit
IDT_A8R8G8B8 = 1,IDT_X8B8G8R8 = 2,//depth 24bit
IDT_R8G8B8 = 3,//depth 16bit
IDT_R5G6B5 = 4,IDT_X1R5G5B5 = 5,IDT_A1R5G5B5 = 6,IDT_A4R4G4B4 = 7,IDT_X4R4G4B4 = 8,//depth 8bit
IDT_R3G3B2 = 9,IDT_INDEX8 = 10,//depth 4bit
//IDT_A1R1G1B1 = 11,//IDT_X1R1G1B1 = 12,IDT_INDEX4 = 13,//depth 1bit
IDT_INDEX1 = 14,IDT_UNKNOWN =-1, };
二.使用InstallShield制作安裝程序
修改InstallShield對話框的過程:
一:改變InstallShield自帶的對話框的方法
1.首先用VC.NET打開_isres.dll資源DLL,該DLL是InstallShield自帶的DLL,里面存放了InstallShield中所有自帶對話框模板。
2.在VC.NET中修改對話框(對話框ID可以通過Dialog Sampler工具得到)
3.保存修改。
注意:修改InstallShield自帶的對話框只能修改一些文本,和一些控件的相對位置,不能修改控件的ID和增加一些控件,不然會導致控件消息映射不正確。
二:自制可以在InstallShield對話框:
1.首先用VS.NET打開
注意: 一定要保存所有的控件ID-Value
InstallShield總結文檔:
1.制作自己的對話框作為自己的主界面(修改-isuser.dll,路徑為:C:Program FilesInstallShieldProfessionalStandard Edition
RedistributableCompressed Files