Текущий архив: 2010.08.27;
Скачать: CL | DM;
Внизкак сравнить содержимое двух TImage? Найти похожие ветки
← →
pavel_guzhanov © (2010-03-07 17:22) [0]На форме имеются два Timage. В них загружены изображения (например .bmp). Размеры Timage одинаковы. Как проверить, являются ли изображения одинаковыми?
← →
Игорь Шевченко © (2010-03-07 17:32) [1]критерии одинаковости не озвучены. Если с точностью до бита - выгрузить в файлы и сравнить файлы побайтно, если можно игнорировать незначительную разницу в цвете, то привести к черно-белому изображению с нормализацией (например), сравнить побитно два черно-белых изображения, и т.п.
← →
pavel_guzhanov © (2010-03-07 17:50) [2]С точностью до бита... Изображения маленького размера, 200-300 байт. Но хотелось бы не выгружать их в файл.
Может быть можно как-то сравнить по имени файла, из которого изображение загружено в Timage? Или как-то "просканировать" содержимое TImage?
← →
Игорь Шевченко © (2010-03-07 17:52) [3]
> С точностью до бита... Изображения маленького размера, 200-
> 300 байт. Но хотелось бы не выгружать их в файл.
Тогда через Scanline будет удобно
← →
pavel_guzhanov © (2010-03-07 18:16) [4]Спасибо, буду разбираться.
← →
antonn © (2010-03-07 18:29) [5]если размеры одинаковы, то можно снять хеш с памяти
← →
Leonid Troyanovsky © (2010-03-07 18:53) [6]
> antonn © (07.03.10 18:29) [5]
> если размеры одинаковы, то можно снять хеш с памяти
Не нужно.
Для двух уж точно.
--
Regards, LVT.
← →
Jeer © (2010-03-07 19:14) [7]Лично мне, так ка-а-тся, достаточно проверить один единственный случайный бит (там и там), чтобы понять, что изображения "отличаются".
← →
antonn © (2010-03-07 19:31) [8]
> Не нужно.
нужно или нет решать автору, я говорю что "можно"
← →
Leonid Troyanovsky © (2010-03-07 20:27) [9]
> antonn © (07.03.10 19:31) [8]
А говорю не только автору.
--
Regards, LVT.
← →
pavel_guzhanov © (2010-03-08 18:31) [10]Делаю примерно вот так:
procedure TMainForm.OnClickImage(sender:TObject);
var BitMap:Graphics.TBitMap;
begin
Name:=TControl(Sender).Name;
BitMap:=TImage(FindComponent(Name)).Picture.Bitmap;
На выделенной строке получаю Access violation. Что я делаю не так?
← →
Игорь Шевченко © (2010-03-08 18:39) [11]
> На выделенной строке получаю Access violation. Что я делаю
> не так?
with Sender as TImage do
Bitmap := Picture.Bitmap;
?
← →
pavel_guzhanov © (2010-03-08 18:49) [12]мне надо определить Timage по имени, т.к надо сравнить содержимое того, который передается как Sender, и еще одного из находящихся на форме, определяемого по имени...
← →
antonn © (2010-03-08 19:55) [13]в Timage случаем не jpeg загружен?
← →
Игорь Шевченко © (2010-03-08 21:01) [14]
> мне надо определить Timage по имени, т.к надо сравнить содержимое
> того, который передается как Sender, и еще одного из находящихся
> на форме, определяемого по имени...
Ну и ? Имена у них отличаются, связь между именами двух TImage в твоей программе я не знаю, в приведенном коде двумя TImage не пахнет,
чем помочь-то ?
← →
pavel_guzhanov © (2010-03-08 21:08) [15]
> Игорь Шевченко © (08.03.10 21:01) [14]Name:=TControl(Sender as TImage).Name;
xa:=StrToInt(copy(name, 2, 2));
ya:=StrToInt(copy(name, 4, 2));
xaR:=xA;
yaR:=ya+1;
if length(IntToStr(xaR))<2 then
NameR:="B0"+IntToStr(xaR)
else
NameR:="B"+IntToStr(xaR);
if length(IntToStr(yaR))<2 then
NameR:=NameR+"0"+IntToStr(yaR)
else
NameR:=NameR+IntToStr(yaR);
BitMap:=TImage(FindComponent(Name)).Picture.Bitmap;
BitMapR:=TImage(FindComponent(NameR)).Picture.Bitmap;
на выделенной строке получаю Access Violation
> antonn © (08.03.10 19:55) [13]
> pavel_guzhanov © (07.03.10 17:22)
>
> На форме имеются два Timage. В них загружены изображения
> (например .bmp)
← →
Игорь Шевченко © (2010-03-08 21:14) [16]var
SenderName: string;
Image1, Image2: TImage;
begin
Image1 := Sender as TImage;
SenderName := Image1.Name;
...Мабл-ванго с именем..
Image2 := FindComponent(RName) as TImage;
← →
Leonid Troyanovsky © (2010-03-09 08:06) [17]
> pavel_guzhanov © (08.03.10 18:31) [10]
> procedure TMainForm.OnClickImage(sender:TObject);
> var BitMap:Graphics.TBitMap;
> begin
> Name:=TControl(Sender).Name;
> BitMap:=TImage(FindComponent(Name)).Picture.Bitmap;
>
> На выделенной строке получаю Access violation. Что я делаю
> не так?
Про AV - не верю.
Или что-то ты не договариваешь.
А не так - Name:=TControl(Sender).Name; - портим имя формы.
Ну и Sender as TControl, если уж на то пошло.
--
Regards, LVT.
← →
Омлет © (2010-03-12 09:23) [18]Если известно, что bpp и палитры (если есть) у картинок одинаковы, то используй CompareMem. Что-то типа:
for y := 0 to B1.Height -1 do
begin
P1:= B1.ScanLine[y];
P2:= B2.ScanLine[y];
if not CompareMem(p1, p2, w) then
begin
Result := False;
Break;
end;
end;
Давно как-то была тема http://delphimaster.net/view/8-1095095132
Пришли к выводу, что для правильного точного сравнения нужно сравнивать попиксельно цвета. Это если требуется универсальность. А, зачастую, CompareMem достаточно.
Быстрый CompareMem есть в Fastcode.
Страницы: 1 вся ветка
Текущий архив: 2010.08.27;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.063 c