tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
334
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    XChris XChris ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Ort
    Weimar
    Beiträge
    373
    Hallo,

    habe nun lange zeit nix mehr programmiert ... und darf endlich mal wieder reinhauen.

    Ich hab folgendes Problem: Eine Grafik wird in ein System übernommen. Dabei muss sichergestellt werden, dass die Grafik danach sich nie wieder verändert hat. Ich denke mir, mit dem Kopiervorgang müßte ich ein ein Attribute des Bildes so codieren können, dass ich es später immer wieder vergleichen könnte. Jemand eine Idee, wie ich dies Speicherschohnend und schnell mache?

    Chris
     

  2. #2
    Avatar von DrSoong
    DrSoong DrSoong ist offline Iss was, Doc!
    tutorials.de Premium-User
    Registriert seit
    Jul 2003
    Ort
    Dem Zentrum meiner Welt
    Beiträge
    1.836
    Blog-Einträge
    85
    Verwende doch ein Hash-Verfahren ala MD5 oder SHA1, du erstellst dabei einen Hash der nicht veränderlichen Eigenschaften bzw. des ganzen Bildes. Später kannst du diesen gespeicherten Hash mit einem aktuell erstellten vergleichen, so siehst du gleich, ob es eine Änderung gegeben hat.


    Der Doc!
     
    A: Hilfe, ich hab zwei Dateien hinzugefügt und nun sind die anderen weg
    B: Die Scrollbar da rechts ist dir schon mal aufgefallen?

  3. #3
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Hash-Codes bieten nur die Möglichkeit für einen Plausibilitätstest, und eine gute Hashfunktion zu erstellen kann schwierig werden. Um sicherzustellen, dass die Grafik nicht verändert wird, ist es einfacher und besser, den Zugriff zu kapseln. Du erstellst dann eine Art Adapter-Klasse, welche das Bild einliest und bei Bedarf zur Verfügung stellt. Dabei lieferst du nicht das Bild selber zurück, sondern bietest Methoden an, welche die gewünschte bzw. erlaubte Funktionalität anbieten. Denkbar ist beispielsweise eine paint-Methode für Komponenten.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  4. #4
    XChris XChris ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Ort
    Weimar
    Beiträge
    373
    Hi,

    hab nun gedacht, dass ich es so lösen kann:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    public void LoadPic(FileInfo fileInfo)
            {
                FileStream fs = new FileStream(fileInfo.FullName, FileMode.Open,FileAccess.Read);
                byte[] imageData = new byte[fs.Length];
                
                fs.Read(ImageData,0,System.Convert.ToInt32(fs.Length));
                
                fs.Close();
                
                string test = ImageData.GetHashCode().ToString();
     
                   }

    Jedoch erhält test immer wieder neue Werte. Dabei hoffte ich, mit GetHashCode einen eindeutigen "Fingerprint" zu erhalten. Was läuft hier nur schief?

    - UPDATE -
    In FileInfo ist nur ein Verweis zu einer Bilddatei mit 6 megapixel.

    Chris

    PS. Exceptionhandling etc. kommt noch. Hab den Code reduziert, damit nur das Problem sichtbar wird.
    Geändert von XChris (10.03.10 um 09:12 Uhr)
     

  5. #5
    XChris XChris ist offline Mitglied Brokat
    Registriert seit
    Sep 2003
    Ort
    Weimar
    Beiträge
    373
    Ich möchte lösen:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    private string hashImage(string filename)
            {
                FileStream fs = new FileStream(filename, FileMode.Open,FileAccess.Read);
                byte[] imageData = new byte[fs.Length];         
                fs.Read(imageData,0,System.Convert.ToInt32(fs.Length));         
                fs.Close();         
                string test;        
                
                System.Text.Encoding enc = System.Text.Encoding.UTF32;
                
                test = enc.GetString(imageData);
                test = getMD5(test.ToCharArray());
                return test;
            }       
            
            private string getMD5(char[] input)
            {
                System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
                byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
                bs = x.ComputeHash(bs);
                System.Text.StringBuilder s = new System.Text.StringBuilder();
                foreach (byte b in bs)
                {
                    s.Append(b.ToString("x2").ToLower());
                }
                string password = s.ToString();
                return password;
            }

    Chris

    PS: Danke an Mahdi für die Schützenhilfe.
     

Ähnliche Themen

  1. Variablen einen Wertebereich geben
    Von FJK im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 12.08.10, 12:09
  2. Button einen Wert geben
    Von zuckerbrini im Forum HTML & XHTML
    Antworten: 3
    Letzter Beitrag: 29.01.09, 21:29
  3. <div>-Element einen Focus geben
    Von Geflügel im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 01.09.07, 11:03
  4. Datei leserechte geben - darf aber nicht kopiert werden !
    Von KMX-Robin im Forum Hosting & Webserver
    Antworten: 2
    Letzter Beitrag: 13.08.03, 22:53