我有一个.xml文件,其中包含:
<a:xfrm>
<a:off x="381000" y="152400"/>
<a:ext cx="2124075" cy="2162175"/>
</a:xfrm>
这些是图像的坐标。在.Net中,我想在wpf app中用C#显示该图像。我用BitmapImage类做到了这一点。显示图像,但其大小不正确。我能从上面的x,cx,y和cy的数字中找出坐标吗?
这是xml的一个重要部分:
<p:pic>
<p:nvPicPr>
<p:cNvPr id="1026" name="Picture 2" descr="C:\Users\John\Desktop\images.jpg"/>
<p:cNvPicPr>
<a:picLocks noChangeAspect="1" noChangeArrowheads="1"/>
</p:cNvPicPr>
<p:nvPr/>
</p:nvPicPr>
<p:blipFill>
<a:blip r:embed="rId2" cstate="print"/>
<a:srcRect/>
<a:stretch>
<a:fillRect/>
</a:stretch>
</p:blipFill>
<p:spPr bwMode="auto">
<a:xfrm>
<a:off x="381000" y="152400"/>
<a:ext cx="2124075" cy="2162175"/>
</a:xfrm>
<a:prstGeom prst="rect">
<a:avLst/>
</a:prstGeom>
<a:noFill/>
</p:spPr>
</p:pic>
答案 0 :(得分:1)
这是另一个与之相关的问题。 How can I retrieve images from a .pptx file using MS Open XML SDK? 也许你可以使用该问题中的幻数来计算。你的图像大小(类似于cx / 12700)
答案 1 :(得分:0)
您可以使用这些公式将这些值转换为像素,我认为......
VALUE是您要转换的值。我认为Felice Pollano可能有正确的方法来处理它。我希望我能正确理解你的需求。
horizontalPixels = (VALUE * horizontalResolutionInDPI) / 914400
verticalPixels = (VALUE * verticalResolutionInDPI) / 914400
VALUE是XML中提供的值。 horizontalPixels是图像的实际宽度(以像素为单位),horizontalResolutionInDPI是图像的DPI。
答案 2 :(得分:0)
你只需要扩展。首先找到边界,我们只需要知道是什么是cx,我想是形状放置的中心,所以只收集两个方向的所有坐标:这意味着cx+x,cy+y, cx-x,cy -y
,并找到min x,min y,max x / max y。获得此信息后,您可以通过根据计算的X或Y最大值跳过图像大小的宽度或高度来计算缩放系数。然后在绘制之前将所有ypour坐标乘以该因子。您应该选择仅在一个X或Y中计算比例以保持图像方面。