Получить размер битмапа в байтах - 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(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д