ASPにてCOMでJPEG描画
いまさらASPとCOMにて仕事してます。
ASPにてCOMでJPEG描画方法。
まず、charのバイナリデータをバリアント型へ変換する
COMの作り方は説明しないのでわかんない人は学習してください
/** * バイナリデータ配列をバリアント型へ */ //const int MAX_SIZE = 1024 * 1024; //1M byte を超えるデータは処理しない int CCommon::bin2variant(VARIANT * vstr,const UCHAR * const ptr,const UINT bufsize) { if(ptr == NULL || bufsize > MAX_SIZE){ return -1; } ULONG nElem = bufsize; VariantClear(vstr); V_VT(vstr)=VT_ARRAY | VT_UI1; //バリアント型作成(配列格納のためのテンポラリ) VARIANT vtemp; VariantInit(&vtemp); V_VT(&vtemp) = VT_BSTR; //バリアント配列作成 SAFEARRAYBOUND sabound[1]; sabound[0].cElements = nElem; sabound[0].lLbound = 0; //= {NumOfVal,0}; SAFEARRAY *psa = SafeArrayCreate(VT_UI1,1,sabound);//配列の型,配列の次元数,SABOUNDのアドレス //LPVARIANT rgElems; char *buf; SafeArrayAccessData(psa,(LPVOID*)&buf); for(int i = 0; i < nElem; i++){ // V_BSTR(&vtemp) = *ptr + i; buf[i] = *(ptr + i); } SafeArrayUnaccessData(psa); // V_ARRAY(vstr)=psa; if(vstr->vt & VT_BYREF) *(vstr->pparray) = psa; else vstr->parray = psa; return 1; }
そのあとは、ASPのコードにて
Set test = CreateObject("img.ImgInterface")'COMの呼び出し Dim dateset(2) dateset(0) = "0" 'fnum 'パラメタを渡してやったりする dateset(1) = "1" 'fnum Response.ContentType = "image/jpeg" 'コンテンツタイプ Response.BinaryWrite test.Image(dateset)'バイナリを書く Set test = Nothing
するとIEにイメージが表示されるよ。
簡単だね。