Форум: "Media";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
ВнизСравнение изображений Найти похожие ветки
← →
Grief © (2005-04-20 18:43) [0]Как "быстро" проверить, что на двух битмапах АБСОЛЮТНО одинаковое изображение? попиксельно - медленно, а канвасами (Bitmap1.canvas = Bitmap2.canvas - не получается! :()
← →
Магнитоныч (2005-04-20 22:42) [1]Для растров с bpp > 8
function BitmapsEqual(Bmp1, Bmp2: TBitmap): Boolean;
var H, H2, LineLength, y: Integer;
DS: TDIBSection;
function EqualLine(Line: Integer): Boolean;
begin
Result := CompareMem(@Bmp1.ScanLine[Line]^,
@Bmp2.ScanLine[Line]^, LineLength)
end;
begin
Result := False;
{ Сравнение базовых параметров }
if (Bmp1.PixelFormat <> Bmp2.PixelFormat) or
(Bmp1.Width <> Bmp2.Width) or (Bmp1.Height <> Bmp2.Height) or
(Bmp1.Width < 1) or (Bmp1.Height < 1)
then Exit;
if GetObject(Bmp1.Handle, SizeOf(DS), @DS) > 0
then LineLength := DS.dsBm.bmWidthBytes
else Exit; //error
H := Bmp1.Height - 1;
if H = 0 then
Result := EqualLine(0)
else begin
Result := True;
H2 := ((H+1) div 2) - 1;
{ Сравниваем строки. Цикл проходит строки одновременно сверху
и снизу, сходясь в центре: так больше вероятность
скорейшего обнаружения отличающихся пикселей. }
for y := 0 to H2 do
if (not EqualLine(y)) or (not EqualLine(H-y)) then
begin
Result := False;
Exit;
end;
{ Если высота не кратна двум, сравниваем средние строки,
которые пропустили в цикле. Это сделано, чтобы дважны
не вызавать CompareMem для одной строки. }
if (H mod 2) = 0 then
Result := EqualLine(H2 + 1);
end;
end;
← →
WondeRu © (2005-04-21 10:25) [2]GetDIBits + CompareMem
← →
Jeer © (2005-04-21 11:24) [3]CRC file
← →
Grief © (2005-04-21 12:34) [4]Магнитоныч, спасибо, надо будет разобраться *чешу репу*...
Jeer, а как получить CRC не файла? то есть битмап есть только в памяти? Да и у файла я не совсем знаю как это сделать...
← →
Jeer © (2005-04-21 14:24) [5]CRC-файл в том случае, если нет необходимости визуализации.
Иначе, через CompareMem.
Можно, конечно, CRC memory, но смысл ? Медленнее.
← →
Grief © (2005-06-04 23:55) [6]scanline вроде работает
можно ими прям и сравнивать
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c