00001 // 00002 // CDxGraphDoc.cpp : インプリメンテーション ファイル 00003 // 00004 00005 #include "MFCBase.h" 00006 #include "DxGraphDoc.h" 00007 00008 00009 #ifdef _DEBUG 00010 #define new DEBUG_NEW 00011 #undef THIS_FILE 00012 static char THIS_FILE[] = __FILE__; 00013 #endif 00014 00015 00016 using namespace jbxwl; 00017 00018 00020 // CDxGraphDoc 00021 00022 IMPLEMENT_DYNCREATE(CDxGraphDoc, CExDocument) 00023 00024 // 00025 CDxGraphDoc::CDxGraphDoc() 00026 { 00027 } 00028 00029 00030 // 00031 CDxGraphDoc::~CDxGraphDoc() 00032 { 00033 } 00034 00035 00036 00037 BEGIN_MESSAGE_MAP(CDxGraphDoc, CExDocument) 00038 //{{AFX_MSG_MAP(CDxGraphDoc) 00039 // メモ - ClassWizard はこの位置にマッピング用のマクロを追加または削除します. 00040 //}}AFX_MSG_MAP 00041 END_MESSAGE_MAP() 00042 00043 00044 00045 00047 // CDxGraphDoc 診断 00048 00049 #ifdef _DEBUG 00050 void CDxGraphDoc::AssertValid() const 00051 { 00052 CExDocument::AssertValid(); 00053 } 00054 00055 // 00056 void CDxGraphDoc::Dump(CDumpContext& dc) const 00057 { 00058 CExDocument::Dump(dc); 00059 } 00060 #endif //_DEBUG 00061 00062 00063 00064 00066 // CDxGraphDoc シリアライズ 00067 00068 void CDxGraphDoc::Serialize(CArchive& ar) 00069 { 00070 if (ar.IsStoring()) 00071 { 00072 // TODO: この位置に保存用のコードを追加してください 00073 } 00074 else 00075 { 00076 // TODO: この位置に読み込み用のコードを追加してください 00077 } 00078 } 00079 00080 00081 00082 00084 // CDxGraphDoc コマンド 00085 00100 BOOL CDxGraphDoc::ReadDataFile(LPCTSTR str) 00101 { 00102 char* fname = ts2mbs(str); 00103 msGraph = readGraphicFile<sWord>(fname, &cmnHead); 00104 ::free(fname); 00105 infHead = getinfo_CmnHead(cmnHead); 00106 00107 if (cmnHead.kind==HEADER_NONE) return FALSE; 00108 return TRUE; 00109 } 00110 00111 00112 00113 BOOL CDxGraphDoc::MakeViewData() 00114 { 00115 // int kind = cmnHead.kind; 00116 // int chk = kind & 0x00ff; 00117 00118 if (!msGraph.isNull()) { 00119 freeCmnHead(&cmnHead); 00120 00121 int mode = 0; 00122 if (msGraph.color==GRAPH_COLOR_MONO || msGraph.color==GRAPH_COLOR_MONO16 || // 表示は 8bit 00123 msGraph.color==GRAPH_COLOR_RGB || msGraph.color==GRAPH_COLOR_BGR || 00124 msGraph.color==GRAPH_COLOR_XRGB || msGraph.color==GRAPH_COLOR_ARGB || msGraph.color==GRAPH_COLOR_RGBA || 00125 msGraph.color==GRAPH_COLOR_XBGR || msGraph.color==GRAPH_COLOR_ABGR || msGraph.color==GRAPH_COLOR_BGRA) { 00126 // 8bit/pixcel 00127 mode = MG2CH_OCTET; 00128 } 00129 if (ctrlCntrst || msGraph.color==GRAPH_COLOR_MONO16) { 00130 mode |= MG2CH_CONTRAST; 00131 } 00132 00133 // 00134 cmnHead = copyMSGraph2CmnHead(msGraph, mode); 00135 00136 // 00137 cMax = vMax = msGraph.max; 00138 cMin = vMin = msGraph.min; 00139 if (msGraph.color==GRAPH_COLOR_RGB16 || msGraph.color==GRAPH_COLOR_ARGB16) { 00140 // 16bit/pixcel 00141 //vMax = cMax = UWORDMAX; 00142 //vMin = cMin = 0; 00143 } 00144 else if (!ctrlCntrst && cMin>=0 && cMax<=VIEW_8_MAX) { 00145 vMax = cMax = VIEW_8_MAX; 00146 vMin = cMin = 0; 00147 } 00148 } 00149 00150 else { // DirectX9 サポートデータ(DirectX9に任せる) 00151 D3DXIMAGE_INFO imgInfo; 00152 HRESULT hr = D3DXGetImageInfoFromFileInMemory(cmnHead.grptr, cmnHead.lsize, &imgInfo); 00153 if (FAILED(hr)) { 00154 freeNull(cmnHead.grptr); 00155 cmnHead.kind = HEADER_NONE; 00156 return FALSE; 00157 } 00158 cmnHead.xsize = imgInfo.Width; 00159 cmnHead.ysize = imgInfo.Height; 00160 cmnHead.zsize = 1; 00161 cmnHead.depth = imgInfo.Format; 00162 cmnHead.bsize = sizeof(D3DXIMAGE_INFO); 00163 cmnHead.buf = (uByte*)malloc(cmnHead.bsize); 00164 if (cmnHead.buf==NULL) { 00165 freeCmnHead(&cmnHead); 00166 return FALSE; 00167 } 00168 bcopy((char*)&imgInfo, (char*)cmnHead.buf, cmnHead.bsize); 00169 } 00170 return TRUE; 00171 } 00172