最近拿到了爱国者照相机的sdk,东西有些粗糙,没有做成dll,代码全部公开。(不过程序还是写的蛮规范的)
由于,项目需求是要旋转90度预览,所以需要修改原先给的例子。稍稍读了一下源代码和找了一些例子。
源代码是从相机拿到一帧内容,转换成bmp格式,再由gdi显示。
而网上的例子都是用gdi+直接有图片旋转做的,要改当然可以,只是不想把原先的写法都破坏了。
还是想在gdi中直接实现。看来只能求助于msdn。
在msdn中果然找到了方法。mircosoft的帮助文档就是强啊。难怪用惯了微软的ide,用其他的就是感到别扭。
XFORM xForm;
xForm.eM11 = (FLOAT) 0.0;
xForm.eM12 = (FLOAT) 1.0;
xForm.eM21 = (FLOAT) 1.0;
xForm.eM22 = (FLOAT) 0.0;
xForm.eDx = (FLOAT) 0.0;
xForm.eDy = (FLOAT) 0.0;
SetWorldTransform(pDC->GetSafeHdc(), &xForm);
通过SetWorldTransform,把画布转了90度,这样原先正常的绘图功能都不用改,很是方便啊。
当然xForm不只是能做90度旋转,他其实是任何角度旋转的矩阵表。把原先的xy坐标映射成如下坐标:
SetWorldTransform PRE.clsCode { font-size:110%; } PRE.clsSyntax { font-size:100%; } TD DIV.clsBeta { display:none;} MSHelp/:link { color:#0000ff; text-decoration:underline; cursor:hand; hoverColor:#3366ff; filterString: ;}
x' = x * eM11 + y * eM21 + eDx, y' = x * eM12 + y * eM22 + eDy,
这样,能就能做简单的图像转化了。