Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 替换形状中的图像,而不是添加新图像_Vb.net_Image_Vsto_Powerpoint_Shape - Fatal编程技术网

Vb.net 替换形状中的图像,而不是添加新图像

Vb.net 替换形状中的图像,而不是添加新图像,vb.net,image,vsto,powerpoint,shape,Vb.net,Image,Vsto,Powerpoint,Shape,我有一个用VB.NET编写的VSTO,希望将选定的图像最大化为背景。文档告诉我删除旧形状并添加一个带有AddPicture的新形状,但我有一个模板,其中包含已经存在的图像形状,并且AddPicture将图像放在已经存在的其中一个形状中 为了防止图像以错误的形状着陆,我真的只想用调整大小的图像替换原始图像 这就是我所拥有的: dim src as PowerPoint.Shape = PowerPoint.Selection.ShapeRange.Item(1) src.Export(file1,

我有一个用VB.NET编写的VSTO,希望将选定的图像最大化为背景。文档告诉我删除旧形状并添加一个带有
AddPicture
的新形状,但我有一个模板,其中包含已经存在的图像形状,并且
AddPicture
将图像放在已经存在的其中一个形状中

为了防止图像以错误的形状着陆,我真的只想用调整大小的图像替换原始图像

这就是我所拥有的:

dim src as PowerPoint.Shape = PowerPoint.Selection.ShapeRange.Item(1)
src.Export(file1, PowerPoint.PpShapeFormat.ppShapeFormatPNG)
dim img as Image = BitMap.FromFile(file1)
然后是一些图像魔法,然后:

img.Save(file2, PowerPoint.PpShapeFormat.ppShapeFormatPNG)

Dim _S As PowerPoint.Slide = ppApp.ActiveWindow.View.Slide
Dim _P As PowerPoint.Shape = _S.Shapes.AddPicture2(file2, MsoTriState.msoFalse, MsoTriState.msoTrue, 0, 0, _W, _H)
但这会将图像置于错误的模板形状中


有没有一种方法可以在不添加新形状的情况下替换形状中的图像

您不能在形状中插入图像,只能(在某些情况下)在占位符中插入图像,并且您已经提到您特别不想这样做

您可以使用图像填充形状,但除非您不介意图像失真,否则图像和形状的纵横比必须匹配


建议:在添加新图像/形状之前,请在幻灯片上的所有形状中反复搜索占位符形状。如果任何占位符形状的类型可以包含图像(内容、图片和剪贴画占位符),请使用虚拟内容(内容为几个字符的文本,其他两个为任意图片)。添加您的图像;由于“支持图像”的占位符已填充,因此图像将作为新形状添加。然后删除已添加虚拟内容的每个形状。删除包含内容的占位符时,内容将被删除,并留下原始的空占位符。

您尝试过吗?这正是重点。。所有的方法似乎都会删除旧的形状并插入一个带有类型图像的新形状。但是,因为我有一个模板,它有附加的shapeholder,AddPicture方法将图像插入到我绝对不想要的模板中。我正在寻找一种方法来替换现有形状中的实际图像。实际上,这正是我现在手动执行的操作:)如果我忘记了一个,那将非常乏味和令人沮丧。我希望你能替换一个图像,但这听起来不可能。我会尝试一下,看看一个shapeholder是否是空的,填充它,粘贴/删除图像,清空占位符。好的,还有时间再试一次,但当我重新阅读你的答案时,我不会遇到完全相同的问题吗?如何将虚拟内容放入支持图像的形状中?这就是问题所在。如果我能做到这一点,我会把我的图像放在我需要的形状上,而不是把虚拟图像放在所有其他的形状上;)。。有什么想法吗?这听起来像是一个循环问题。你可以在你插入虚拟内容的任何占位符中添加标签:oSh.tags.add“dummy”,“Y”,然后在添加真实图像后,迭代幻灯片上的每个形状(向后,从Shapes.Count到1步-1),如果oSh.tags(“dummy”)=“Y”,那么oSh.DeleteHm,这仍然感觉像是鸡和蛋的问题。现在,我已尝试对_selection.Shapes中的每个sh执行
,如果sh不是_OrgShape,则执行sh.Cut()_selection.Shapes.Paste(),如果End为
,则尝试查找原始容器并将新图像粘贴到该占位符中。但不知何故,形状的顺序似乎没有如预期的那样改变,图像现在在占位符中显得相当随机。。因此,我仍然在寻找一个优雅的解决方案:(