正如你所看到的,它只是一个只有小红色矩形的1920x1080图像,我想只剪切这个图像的非透视像素(在我们的例子中只有小的小块)。
所以我开始扫描这个图像并获得非transpert块边界。 这就是我到目前为止所做的:
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<configuration>
<tasks>
<scp
file="${project.basedir}/target/${war.warName}.war"
todir="${scp.finalDir}"
trust="true"
failonerror="true"/>
</tasks>
</configuration>
<executions>
<execution>
<id>copy-war-to-server</id>
<phase>install</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-jsch</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.42</version>
</dependency>
</dependencies>
</plugin>
但我得到了奇怪的结果......我认为这是一个简单的错字,我无法弄清楚......或者它可能是错误的代码逻辑......
我很感激并得到了帮助!
答案 0 :(得分:0)
我刚才在其他帖子上回答了这个问题:Cut transparent parts image
public static Bitmap Trim(string fileName)
{
Bitmap bmp = null;
try
{
bmp = Bitmap.FromFile(fileName) as Bitmap;
if (bmp == null)
throw new ArgumentException("The file is not a valid image.");
if (bmp.PixelFormat != PixelFormat.Format32bppArgb)
throw new ArgumentException("The image file is in an invalid format (32bpp ARGB required)");
}
catch (Exception ex)
{
throw new ArgumentException("The file is not a valid image.", ex);
}
BitmapData bmpData = null;
int minX, minY, maxX, maxY;
minX = minY = int.MaxValue;
maxX = maxY = int.MinValue;
try
{
bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, bmp.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = bmpData.Stride * bmp.Height;
int[] pixelData = new int[bmp.Width * bmp.Height];
System.Runtime.InteropServices.Marshal.Copy(ptr, pixelData, 0, pixelData.Length);
for (int y = 0; y < bmp.Height; y++)
{
for (int x = 0; x < bmp.Width; x++)
{
Color pixel = Color.FromArgb(pixelData[x + (bmp.Width * y)]);
if (pixel.A != 0)
{
if (x < minX) minX = x;
if (x > maxX) maxX = x;
if (y < minY) minY = y;
if (y > maxY) maxY = y;
}
}
}
pixelData = null;
Rectangle cutRect = new Rectangle(minX, minY, maxX - minX, maxY - minY);
bmp.UnlockBits(bmpData);
return bmp.Clone(cutRect, bmp.PixelFormat);
}
finally
{
}
}
我认为最大的问题是矩形的计算不正确。你有一个最小x / y和一个最大x / y,你用它作为x,y,宽度,高度。您需要从最小值中减去最大x / y的宽度/高度。
另一个问题是像素格式是32BPP ARGB,而不是RGBA,因此alpha通道首先出现,而不是索引3.最好的办法是从整数值创建Color
结构,检查一下,但上面的算法仅适用于32bpp ARGB值,因为颜色只有FromARGB
函数。