![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Попиксельное сравнение картинокDelphi , Графика и Игры , BitmapПопиксельное сравнение картинок
Оформил: DeeCo procedure TForm1.Button1Click(Sender: TObject); var b1, b2: TBitmap; c1, c2: PByte; x, y, i, different: Integer; // Counter for different pixels begin b1 := Image1.Picture.Bitmap; b2 := Image2.Picture.Bitmap; Assert(b1.PixelFormat = b2.PixelFormat); // they have to be equal different := 0; for y := 0 to b1.Height - 1 do begin c1 := b1.Scanline[y]; c2 := b2.Scanline[y]; for x := 0 to b1.Width - 1 do for i := 0 to BytesPerPixel - 1 do // 1, to 4, dep. on pixelformat begin Inc(different, Integer(c1^ <> c2^)); Inc(c1); Inc(c2); end; end; end; Переведенный текст: Код на Delphi - процедура, сравнивающая два изображения и подсчитывающая количество различных пикселей между ними. Сравнение производится пиксель за пикселем, учитывая глубину цвета каждого пикселя (1, 4 или 8 бит в зависимости от формата изображения). Вот шаг за шагом, что код делает:
Заявление Assert обеспечивает, что оба битмапа имеют тот же формат пикселей перед продолжением сравнения. Это необходимо потому, что некоторые форматы изображений могут не быть совместимы для сравнения (например, разные глубины цвета). Обратите внимание: код предполагает, что изображения хранятся в приложении Delphi и доступны через контролы Альтернативное решение: Вместо ручного прохода по каждому пикселю и байту можно использовать свойство TBitmap.ScanLine для получения указателя на строку (строку) и затем использовать тип PByte для прохода по пикселям. Этот подход может быть более эффективным для больших изображений.
В этом коде используется тип PByte для прохода по пикселям и сравнения их значений. Функция Inc используется для увеличения указателя на следующий пиксель в обеих строках. В статье описывается процедура TForm1.Button1Click, которая сравнивает два изображения в пиксельном масштабе и находит количество отличающихся пикселей. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |