在.net GDI中有像Photoshop中那样的“修剪”功能吗?

时间:2011-07-06 13:13:58

标签: .net drawing gdi

大多数Photoshop人都会知道这是做什么的,基本上它会重新调整图像大小以消除所有空白区域。

GDI +中是否有类似的功能?或者我必须自己写?或者,如果有人已经有一个会很好。

3 个答案:

答案 0 :(得分:1)

不,没有一个开箱即用,您必须自己编写,确定“空”空间,然后调整(或复制)图像以删除该“空”空间。

答案 1 :(得分:0)

GDI +中没有任何内置功能,但您可以使用AForge.NET Library,这样做会更多。

答案 2 :(得分:0)

实际上,写这篇文章并不是非常困难。因为我每天都使用Photoshop来设计网站,而我自己开发的软件的应用程序图形,Trim基于您选择的像素颜色。您可以在四个矩形通道中进行计算,方法是浏览像素行,将颜色与您要修剪的颜色进行比较,然后存储您所在的坐标。让我解释一下。

enter image description here enter image description here

基本上你正在做的是从左到右,从上到下导航像素,生成一个Rectangle对象,存储(在这种情况下)白色像素的区域。这将在四次通过中完成,因此您将生成四个将从图像剪切的矩形区域。

计算背后的逻辑如下(在半伪代码C#中)

int x = 0, y = 0;
Rectangle rect = new Rectangle();
bool nonWhitePixelFound = false;

for (int row = 0; row < image.Bounds.Height; row++) {
    if (!nonWhitePixelFound) {
        for (int column = 0; column = image.Bounds.Width; column++) {
            if (pixel.getColor() != Color.White) {
                rect.Width++;
            }
            else {
                rightBoundPixelFound = true; // Okay, we encountered a non-white pixel
                                             // so we know we cannot trim anymore to the right
                rect.Height--; // Since we don't want to clip the row with the non-white pixel
                nonWhitePixelFound = true;
                return rect; // I did not wrap this code in a function body in this example,
                             // but to break both loops you should return, or this would be 
                             // a rare case to use goto
            }
        }
    }
    rect.Height++; // Since we have not found a non-white pixel yet, and went through the
                   // entire row if pixels, we can go ahead and check the next row
}

你基本上会重复这个算法4次通过(图像的4面),直到你修剪了所有的空白(或你需要的任何颜色)。这应该适用于具有分散颜色的非传统形状图像,因为该算法。一旦检测到非白色像素,它就会停止计算该区域,然后您应该剪切该区域,然后执行另一次传递。冲洗并重复。

请注意,我没有测试过这个;这一切都在理论上,但我想为你提供一个总体思路或方法,然后只是链接到第三方库或组件。

编辑: