是否可以通過編程測量C#中PNG邊(左上角)的填充(空白區域)?我可以以某種方式從像素開始一邊逐像素地分析圖像,檢查像素是否有任何不清晰或空的東西?我如何確定像素是空的而不是顏色?以編程方式測量PNG圖像的填充/清除側邊空間
我的PNG被加載到UIImageView,但我可以處理PNG或UIImage/UIImageView。什麼都有效。
這裏有一個PNG
這是我希望以編程方式測量的東西。
--------------這裏的解決方案顯然貼----------------
UIImage Image = UIImage.FromFile("image.png");
IntPtr bitmapData = RequestImagePixelData(Image);
PointF point = new PointF(100,100);
//Check for out of bounds
if(point.Y < 0 || point.X < 0 || point.Y > Image.Size.Height || point.X > Image.Size.Width)
{
Console.WriteLine("out of bounds!");
}
else
{
Console.WriteLine("in bounds!");
var startByte = (int) ((point.Y * Image.Size.Width + point.X) * 4);
byte alpha = GetByte(startByte, bitmapData);
Console.WriteLine("Alpha value of an image of size {0} at point {1}, {2} is {3}", Image.Size, point.X, point.Y, alpha);
}
protected IntPtr RequestImagePixelData(UIImage InImage)
{
CGImage image = InImage.CGImage;
int width = image.Width;
int height = image.Height;
CGColorSpace colorSpace = image.ColorSpace;
int bytesPerRow = image.BytesPerRow;
int bitsPerComponent = image.BitsPerComponent;
CGImageAlphaInfo alphaInfo = image.AlphaInfo;
IntPtr rawData;
CGBitmapContext context = new CGBitmapContext(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, alphaInfo);
context.SetBlendMode(CGBlendMode.Copy);
context.DrawImage(new RectangleF(0, 0, width, height), image);
return context.Data;
}
//Note: Unsafe code. Make sure to allow unsafe code in your
unsafe byte GetByte(int offset, IntPtr buffer)
{
byte* bufferAsBytes = (byte*) buffer;
return bufferAsBytes[offset];
}
現在我需要做解析每個像素並確定清晰像素停止位置的邏輯。這個邏輯非常簡單,所以我不打算髮布。簡單地從雙方開始,按照自己的方式工作,直到找到不爲零的alpha值。
感謝大家的幫助!
請更具體。你想處理PNG文件,或加載到你的應用程序的圖像?你有嘗試過什麼嗎? – 2013-02-19 14:55:14
我正在考慮處理PNG文件。如果有辦法處理UIImage,我也可以這樣做,但我現在還不知道怎麼做 – LampShade 2013-02-19 14:56:36