2013-03-20 68 views
0

我需要裁剪图像,指定可能超出图像边界的坐标。如果坐标关闭,则应用适当的填充。用填充裁剪

通常情况下:

+===============+ 
| Source Bitmap | 
| +-------+ | 
| + Crop + | 
| +-------+ | 
|    | 
+===============+ 

...与WriteableBitmapEx的Crop()延长工作得很好。但在我的情况下:

+-----------+ 
+ Crop  + 
+   + 
+ +===============+ 
+ | Source Bitmap | 
+ |    | 
+ +===============+ 
+   + 
+-----------+ 

在这种情况下,边界超过了顶部,左边和底部。生成位图必须是:

+-----------+ 
+   + 
+   + 
+ +=========+ 
+ |   + 
+ |   + 
+ +=========+ 
+   + 
+-----------+ 

什么是最好的,最快的方式做到这一点?

回答

1

最简单的方法是用最终结果的维度创建一个新的WB,然后使用Blit()方法将源的区域复制到新的目标位图区域。

漂亮的ASCII艺术作品btw。 :)

+0

这正是我所期待的。出于某种原因,在我的测试过程中,blitting会导致AccessViolationException,但这很可能是其他情况。谢谢! :-) – 2013-03-20 18:49:43

+0

这很可能是因为您提供的坐标超出了WB的范围。 – 2013-03-20 19:06:20

+0

这就是要点(它必须填充)。这似乎是WriteableBitmapEx的问题,因为Clone()方法会生成相同的异常(没有指定边界)。切换到WinRTXAMLToolkit的Copy()不会产生同样的问题。我实际上必须使用Copy()*然后* Blit()。 – 2013-03-20 22:16:12