![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Хочу написать себе программку для нечеткого сравнения изображений. Для начала сравниваю две картинки размером 64x64 (приложены) с помощью найденного в интернете кода. В этих изображениях 256 разных пикселей, но счетчик показывает 384. Почему так происходит? Я раньше не сталкивался с указателями и не совсем понимаю как работает этот код.
Код:
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 3 - 1 do // 1, to 4, dep. on pixelformat begin Inc(different, Integer(c1^ <> c2^)); Inc(c1); Inc(c2); end; end; showmessage(inttostr(different)); end; |
#2
|
||||
|
||||
![]() Код:
for i := 0 to 3 - 1 do // 1, to 4, dep. on pixelformat Указанный код работает и считает верно. Отличных друг от друга байт (не пиксел) 384. Изучи способ хранения пиксел при разном цветовом разрешении. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 05.11.2011 в 21:40. |