static SwfRectIntData CalculateBitmapTrimmedRect(SwfLibraryBitmapDefine bitmap) { var rect = new SwfRectIntData { xMin = bitmap.Width, yMin = bitmap.Height, xMax = 0, yMax = 0 }; for (var i = 0; i < bitmap.Height; ++i) { for (var j = 0; j < bitmap.Width; ++j) { var a = bitmap.ARGB32[(j + i * bitmap.Width) * 4]; if (a > 0) { rect.xMin = Mathf.Min(j, rect.xMin); rect.yMin = Mathf.Min(i, rect.yMin); rect.xMax = Mathf.Max(j + 1, rect.xMax); rect.yMax = Mathf.Max(i + 1, rect.yMax); } } } return(rect.width < 1 || rect.height < 1 ? new SwfRectIntData(0, 0, 1, 1) : rect); }
static SwfBitmapData ConvertBitmap(ushort id, SwfLibraryBitmapDefine bitmap) { var trimmed_rect = bitmap.Redirect > 0 ? new SwfRectIntData(bitmap.Width, bitmap.Height) : CalculateBitmapTrimmedRect(bitmap); return(new SwfBitmapData { Id = id, ARGB32 = bitmap.ARGB32, Redirect = bitmap.Redirect, RealWidth = bitmap.Width, RealHeight = bitmap.Height, TrimmedRect = trimmed_rect }); }