Image compare - a bit more aggresive splitter of lines - thx Gabriele :)

git-svn-id: https://subtitleedit.googlecode.com/svn/trunk@2122 99eadd0c-20b8-1223-b5c4-2a2b2df33de2
This commit is contained in:
niksedk 2013-09-29 16:44:06 +00:00
parent 12d473380d
commit ea7faddaae

View File

@ -172,8 +172,70 @@ namespace Nikse.SubtitleEdit.Logic
} }
if (size > 2) if (size > 2)
{ {
NikseBitmap part = bmp.CopyRectangle(new Rectangle(0, startY, bmp.Width, size+1)); if (size == bmp.Height)
{
if (size > 100)
return SplitVerticalTransparentOrBlack(bmp, 8);
else
parts.Add(new ImageSplitterItem(0, startY, bmp));
}
else
{
parts.Add(new ImageSplitterItem(0, startY, bmp.CopyRectangle(new Rectangle(0, startY, bmp.Width, size + 1))));
}
}
return parts;
}
public static List<ImageSplitterItem> SplitVerticalTransparentOrBlack(NikseBitmap bmp, int lineMinHeight)
{
int startY = 0;
int size = 0;
var parts = new List<ImageSplitterItem>();
for (int y = 0; y < bmp.Height; y++)
{
bool allTransparent = true;
for (int x = 0; x < bmp.Width; x++)
{
Color c = bmp.GetPixel(x, y);
if (c.A > 20 && c.R + c.G + c.B > 20)
{
allTransparent = false;
break;
}
}
if (allTransparent)
{
if (size > 8 && size <= lineMinHeight)
{
size++; // at least 5 pixels, like top of 'i'
}
else
{
if (size > 8)
{
NikseBitmap part = bmp.CopyRectangle(new Rectangle(0, startY, bmp.Width, size + 1));
// part.Save("c:\\line_0_to_width.bmp");
parts.Add(new ImageSplitterItem(0, startY, part)); parts.Add(new ImageSplitterItem(0, startY, part));
// bmp.Save("c:\\original.bmp");
}
size = 0;
startY = y;
}
}
else
{
size++;
}
}
if (size > 2)
{
if (size == bmp.Height)
parts.Add(new ImageSplitterItem(0, startY, bmp));
else
parts.Add(new ImageSplitterItem(0, startY, bmp.CopyRectangle(new Rectangle(0, startY, bmp.Width, size + 1))));
} }
return parts; return parts;
} }
@ -222,8 +284,17 @@ namespace Nikse.SubtitleEdit.Logic
} }
if (size > 2) if (size > 2)
{ {
NikseBitmap part = bmp.CopyRectangle(new Rectangle(0, startY, bmp.Width, size + 1)); if (size == bmp.Height)
parts.Add(new ImageSplitterItem(0, startY, part)); {
if (size > 100)
return SplitVerticalTransparentOrBlack(bmp, lineMinHeight);
else
parts.Add(new ImageSplitterItem(0, startY, bmp));
}
else
{
parts.Add(new ImageSplitterItem(0, startY, bmp.CopyRectangle(new Rectangle(0, startY, bmp.Width, size + 1))));
}
} }
return parts; return parts;
} }