Получить размер битмапа в байтах - C#
Формулировка задачи:
Привет, помогите разобраться со скоростью)
У меня есть куча изображений, которые я рисую и идентифицирую по размеру в байтах (т.е., бывают повторяющиеся изображения, и если у битмапов размер одинаковый, то в дальнейшем я их проверяю на схожесть).
Я сделал функцию, которая берет битмап и возвращает его размер в байтах.
Но она медленная и повышает время работы проги в разы.
Еще пробовал сохранять в memory stream, и брать его длину.
Можно это как-то сделать быстрее?
//получает размера битмапа в байтах
private int GetBitmapLength(Bitmap img)
{
ImageConverter converter = new ImageConverter();
byte[] bytes = (byte[])converter.ConvertTo(img, typeof(byte[]));
return bytes.Length;
}
Или так, по каким свойствам еще можно установить уникальность картинок? Я сразу подумал на размер в байтах... что-нибудь еще уникальное можно из битмапа вытянуть, что для каждой картинки свое?
Решение задачи: «Получить размер битмапа в байтах»
textual
Листинг программы
//получает md5 хэш изображения
private string GetImageHash(Bitmap img)
{
byte[] rawImageData = new byte[256 * 256];
BitmapData bmpd = img.LockBits(new Rectangle(0, 0, 256, 256),
ImageLockMode.ReadOnly,
img.PixelFormat);
Marshal.Copy(bmpd.Scan0, rawImageData, 0, 256 * 256);
img.UnlockBits(bmpd);
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] hash = md5.ComputeHash(rawImageData);
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sBuilder.Append(hash[i].ToString("x2"));
}
return sBuilder.ToString();
}