cximage菜单(Mirror)

// ID_CXIMAGE_MIRROR

文件:CxImage\demo\demoDoc.cpp

菜单项:cximage-》Mirror

ON_COMMAND(ID_CXIMAGE_MIRROR, OnCximageMirror)

  

void CDemoDoc::OnCximageMirror() 
{
	m_MenuCommand=ID_CXIMAGE_MIRROR;
	hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}

  

//_beginthread,VC/VC++函数,创建一个线程。
//链接: https://baike.baidu.com/item/beginthread/4230822?fr=aladdin

  

void /*unsigned long _stdcall*/ RunCxImageThread(void *lpParam)
{
     CDemoDoc *pDoc = (CDemoDoc *)lpParam;
     switch (pDoc->m_MenuCommand)
     {
         status = pDoc->image->Mirror(); // doc->image = newImage;当前的图像
        
     }  
}

  

// CxImage\CxImage\ximatran.cpp
bool CxImage::Mirror(bool bMirrorSelection, bool bMirrorAlpha)
{
	if (!pDib) return false;// void* pDib;            //包含文件头,调色板等等
        
}
bool CxImage::LoadResource(HRSRC hRes, DWORD imagetype, HMODULE hModule)
{
	  DWORD rsize=SizeofResource(hModule,hRes);
	HGLOBAL hMem=::LoadResource(hModule,hRes);
	// LockResource是指锁定资源并得到资源在内存中的第一个字节的指针。
	char* lpVoid=(char*)LockResource(hMem);
     CxMemFile fTmp((BYTE*)lpVoid,rsize);
     return Decode(&fTmp,imagetype); 
    {
      if (imagetype==CXIMAGE_FORMAT_JPG){
		CxImageJPG newima;
		{
			// 构造函数
			CxImageJPG::CxImageJPG(): CxImage(CXIMAGE_FORMAT_JPG)
			{
			#if CXIMAGEJPG_SUPPORT_EXIF
				m_exif = NULL;
				memset(&m_exifinfo, 0, sizeof(EXIFINFO));
			#endif
			}
		}
		newima.CopyInfo(*this); // <ignacio>
		{
			if (pDib==NULL) memcpy(&info,&src.info,sizeof(CXIMAGEINFO));
			/*
			typedef struct tagCxImageInfo {
			DWORD   dwEffWidth;       //双字节对齐宽度
			BYTE*   pImage;           //图像数据
		    void*   pGhost;           //如果这是一个备份(ghost),
				  //则pGhost指向它的原始对象
			DWORD   dwType;           //原始图像格式
			char    szLastError[256]; //调试信息,最后的错误信息
			long    nProgress;        //进度
			long    nEscape;          //取消
			long    nBkgndIndex;      //GIF, PNG, MNG使用
			RGBQUAD nBkgndColor;      //RGB透明使用
			BYTE    nQuality;         //JPEG使用
			long    nFrame;           //TIF, GIF, MNG使用,表示当前活动帧
			long    nNumFrames;       //TIF, GIF, MNG使用,表示总帧数                        
			DWORD   dwFrameDelay;     //GIF, MNG使用,表示帧的延迟
			long    xDPI;             //水平分辨率  
			long    yDPI;             //垂直分辨率  
			RECT    rSelectionBox;    //对象的外包围框
			BYTE    nAlphaMax;        //最大透明度
		bool    bAlphaPaletteEnabled;  //如果调色板中的alpha值是启用的,
			 //则这个变量为true
		bool    bEnabled;         //启用绘制函数
			long    xOffset;
			long    yOffset;
		DWORD   dwEncodeOption;   //GIF, TIF使用:
			// 0=def.1=unc,2=fax3,3=fax4,
									  // 4=pack,5=jpg
			RGBQUAD last_c;           //用于优化GetNearestIndex
			BYTE    last_c_index;
			bool    last_c_isvalid;
			long    nNumLayers;
			DWORD   dwFlags;
		} CXIMAGEINFO;
			*/
		}
		if (newima.Decode(hFile)){// CxImage\CxImage\ximajpg.cpp
			Transfer(newima);// newima 作为临时变量传递this
			return true;
		} else {
			strcpy(info.szLastError,newima.GetLastError());
			return false;
		}
	}
    } 
}
newima.Decode(hFile)
{
	is_exif = DecodeExif(hFile);//= CxMemFile fTmp
	{
		m_exif = new CxExifInfo(&m_exifinfo); // 此时,什么都没有  CxImage\CxImage\ximaexif.cpp
		
	}
	// 获取文件头
	Create(cinfo.output_width, cinfo.output_height, 8*cinfo.output_components, CXIMAGE_FORMAT_JPG);

}

  

posted @ 2022-10-30 15:37  leochan007  阅读(33)  评论(0)    收藏  举报