Кто-то может порекомендовать лучший способ определить, есть ли у растрового изображения альфа-канал и используется ли он?Этот метод работает для меня, но может быть неэффективным, если изображение очень большое, потому что в худшем случае оно повторяет все пиксели:
private static bool IsAlphaBitmap(Bitmap bmp, out BitmapData bmpData)
{
Rectangle bmpBounds = new Rectangle(0, 0, bmp.Width, bmp.Height);
bmpData = bmp.LockBits(bmpBounds, ImageLockMode.ReadOnly, bmp.PixelFormat);
try
{
for (int y = 0; y <= bmpData.Height - 1; y++)
{
for (int x = 0; x <= bmpData.Width - 1; x++)
{
Color pixelColor = Color.FromArgb(
Marshal.ReadInt32(
bmpData.Scan0, (bmpData.Stride * y) + (4 * x)));
if (pixelColor.A > 0 & pixelColor.A < 255)
{
return true;
}
}
}
}
finally
{
bmp.UnlockBits(bmpData);
}
return false;
}
- Это способ продолжить илиЕсть ли оптимальное решение?
- Достаточно ли быстро это решение для очень больших файлов?
Большое спасибо