braintag

公開してしまう備忘録

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にイメージが表示されるよ。
簡単だね。