Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem] Porównywanie obrazków


Rekomendowane odpowiedzi

Opublikowano

Witam,

W jaki sposób można porównać dwa obrazki nie wyświetlając ich? Wszystkie zajmują tyle samo bajtów.

@Edit Jeden screen jest zrobiony normalnie zapisany w paincie bmp24, a drugi przy pomocy _ScreenCapture_Capture, wcześniej ustawiam _ScreenCapture_SetBMPFormat(2) - głębia 24 bit.

 

FileRead porównuje, ale wynik jest pozytywny tylko przy obu screenach z _ScreenCapture.

obraz24.png


Opublikowano

ale np hash będą miały inny

 

albo przykład kodu na gdi+

 

 

#include

 

 

 

_GDIPlus_Startup()

$fname1=FileOpenDialog("First image","","All images(*.bmp;*.jpg;*.png;)")

If $fname1="" Then Exit

$fname2=FileOpenDialog("Second image image","","All images(*.bmp;*.jpg;*.png;)")

If $fname2="" Then Exit

$bm1 = _GDIPlus_ImageLoadFromFile($fname1)

$bm2 = _GDIPlus_ImageLoadFromFile($fname2)

 

MsgBox(0, "bm1==bm2", CompareBitmaps($bm1, $bm2))

_GDIPlus_ImageDispose($bm1)

_GDIPlus_ImageDispose($bm2)

_GDIPlus_Shutdown()

 

Func CompareBitmaps($bm1, $bm2)

 

$Bm1W = _GDIPlus_ImageGetWidth($bm1)

$Bm1H = _GDIPlus_ImageGetHeight($bm1)

$BitmapData1 = _GDIPlus_BitmapLockBits($bm1, 0, 0, $Bm1W, $Bm1H, $GDIP_ILMREAD, $GDIP_PXF32RGB)

$Stride = DllStructGetData($BitmapData1, "Stride")

$Scan0 = DllStructGetData($BitmapData1, "Scan0")

 

$ptr1 = $Scan0

$size1 = ($Bm1H - 1) * $Stride + ($Bm1W - 1) * 4

 

 

$Bm2W = _GDIPlus_ImageGetWidth($bm2)

$Bm2H = _GDIPlus_ImageGetHeight($bm2)

$BitmapData2 = _GDIPlus_BitmapLockBits($bm2, 0, 0, $Bm2W, $Bm2H, $GDIP_ILMREAD, $GDIP_PXF32RGB)

$Stride = DllStructGetData($BitmapData2, "Stride")

$Scan0 = DllStructGetData($BitmapData2, "Scan0")

 

$ptr2 = $Scan0

$size2 = ($Bm2H - 1) * $Stride + ($Bm2W - 1) * 4

 

$smallest = $size1

If $size2 < $smallest Then $smallest = $size2

$call = DllCall("msvcrt.dll", "int:cdecl", "memcmp", "ptr", $ptr1, "ptr", $ptr2, "int", $smallest)

 

 

 

_GDIPlus_BitmapUnlockBits($bm1, $BitmapData1)

_GDIPlus_BitmapUnlockBits($bm2, $BitmapData2)

 

Return ($call[0]=0)

 

 

EndFunc ;==>CompareBitmaps

 

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

Albo porównuj binarnie..

 

Dim $image1, $image2

$file = FileOpen(@ScriptDir & "\image1.jpg", 16)
$image1 = FileRead($file)
FileClose($file)

$file = FileOpen(@ScriptDir & "\image2.jpg", 16)
$image2 = FileRead($file)
FileClose($file)

If $image1 == $image2 Then
MsgBox(0, "", "Takie same!")
Else
MsgBox(0, "", "Inne..")
EndIf

 

Oba obrazki takie same, z tym, że w drugim dodałem małą kropkę w nieznacznie innym kolorze ;)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...