因为是在原有项目中加入新功能,导致走了许多弯路,也问了很多问题。废话不多说,进入正题。
1.在数据库中取图片流
TStream *pStream;
TStreamAdapter *Adapter;
Image *plmg;
pStream = pQuery->CreateBlobStream(pQuery->FieldByName("ImgData"), bmRead);//数据库中取TSream流数据保存在pStream
Adapter = new TStreamAdapter(pStream, soReference);
Adapter->_AddRef();
pImg=new Gdiplus::Image((IStream*)*Adapter,0);//通过TStreamAdapter对象转ISream后保存在plmg
Adapter->_Release();
delete pStream;
2.图片旋转
Gdiplus::Graphics *g=new Gdiplus::Graphics(Image1->Canvas->Handle);
POINT imgRotateCenterPos={0,0}; //旋转中心在图片坐标(相对于图片本身)
PointF centerPos(imgRotateCenterPos.x+pImg->left,imgRotateCenterPos.y+pImg->top);
g->Save();
g->TranslateTransform(centerPos.X,centerPos.Y ); //源点移动到旋转中心
g->RotateTransform(pDevice->pDevNode->Angle); //旋转
g->TranslateTransform(-centerPos.X, -centerPos.Y);//还原源点
g->DrawImage(pImg,pImg->left,pImg->top);
g=NULL;
delete g;
图片旋转通过GDI+实现,几个注意点:
1.如果你发现图片没有显示:初始化GDI+程序结束时释放GDI+;
头文件声明:
ULONG_PTR GdiplusToken;
Gdiplus::GdiplusStartupInput GdiplusStartupInput;
构造函数初始化GDI+
GdiplusStartup(&GdiplusToken,&GdiplusStartupInput, NULL); // 初始化GDI+
析构函数释放GDI+
GdiplusShutdown(GdiplusToken);