Keresés

Új hozzászólás Aktív témák

  • fatal`

    titán

    válasz kingabo #1973 üzenetére

    Az nagyon lassú. Bár C#-ban nem próbálkoztam ilyennel, de delphiben azt lehetett csinálni, hogy mindkét képet betöltöttem egy MemoryStream-be és azoknak a tartalmát hasonlítottam össze (nem kell fájlba menteni).

    A delphis kód így nézett ki:

    function Osszehasonlit(B1, B2: TBitmap): Boolean;
    var
    S1, S2: TMemoryStream;
    begin
    S1 := TMemoryStream.Create;
    S2 := TMemoryStream.Create;
    try
    B1.SaveToStream(S1);
    B2.SaveToStream(S2);
    Result := CompareMem(S1.Memory, S2.Memory, Max(S1.Size, S2.Size));
    finally
    S1.Free;
    S2.Free;
    end;
    end;

    Gondolom van valami hasonló .NET-ben is. A ramot falja ez tény.

  • #90999040

    törölt tag

    válasz kingabo #1973 üzenetére

    Az az igazság, hogy én is csak "Memóriafaló" megoldással tudtam megoldani. :D

    bool Imageegyezike(Image kep1, Image kep2)
    {
    System.IO.MemoryStream ms1 = new System.IO.MemoryStream();
    kep1.Save(ms1, System.Drawing.Imaging.ImageFormat.Png);
    System.IO.MemoryStream ms2 = new System.IO.MemoryStream();
    kep2.Save(ms2, System.Drawing.Imaging.ImageFormat.Png);
    int i = 0;
    int j = 0;
    System.IO.BinaryReader br1 = new System.IO.BinaryReader(ms1);
    System.IO.BinaryReader br2 = new System.IO.BinaryReader(ms2);
    br1.BaseStream.Seek(0, System.IO.SeekOrigin.Begin);
    br1.BaseStream.Seek(0, System.IO.SeekOrigin.Current);
    br2.BaseStream.Seek(0, System.IO.SeekOrigin.Begin);
    br2.BaseStream.Seek(0, System.IO.SeekOrigin.Current);
    try
    {
    do
    {
    i = br1.ReadByte(); j = br2.ReadByte();
    if (i != j) break;
    } while (i != -1 && j != -1);
    }
    catch (System.IO.IOException exc)
    {
    }
    br1.Close();
    br2.Close();
    if (i != j)
    return false;
    else
    return true;
    }

    Mondjuk nagyobb méretű képeknél a MemoryStream helyett lehet FileStream. Lassab, de kevésbé memóriafaló. :K

Új hozzászólás Aktív témák