tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von sheel
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
203
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    Hallo ich möchte gerne die ImageSearch funktion benutzen aber sie gibt nur char zurück mit trennungszeichen |.

    ich bräuchte das die funktion aber ein int array zurückgibt

    könnte mir da wer helfen? ich hab schon alles mögliche was ich gefunden hab probiert bekomm es einfach ned hin.

    ich häng das vs2010 projekt an da is der ganze source code bei.

    in der util.cpp und util.h befindet sich die funktion.

    danke für die hilfe
    Angehängte Dateien Angehängte Dateien
    Geändert von BlackPsycho (25.07.11 um 23:14 Uhr)
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    Aus einem char-Array ca kannst du ganz einfach ein int-Array ia machen, und zwar so:
    Code cpp:
    1
    
    ia = (int *)ca;

    Im Ernst: Was soll denn da drinnen sein, in diesem int-Array?
    Irgendwie willst du ja den Sinn ändern.
    Und wenn du uns schon über 1000 Codezeilen einfach so herklatscht kannst du doch wenigstens sagen, was am Schluss daraus werden soll.
     

  3. #3
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    aber sie gibt nur char zurück mit trennungszeichen |.
    Kannst du mir da ein Beispiel geben, wie sowas ausschaut?
     

  4. #4
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    Die funktion gibt die koordinaten des gefundenen bildes und die width und height zurück.
    ich möchte ein übersetzungsprogramm schreiben das koreanische buttons und ui elemente übersetzt.

    sorry das ich euch so nen haufen code hingeklatscht hab aber ich wusste ned was ihr alles davon braucht.

    ich hab mich oben vielleicht schlecht ausgedrückt, die werte werden in einen char* ausgegeben in form von xx|xx|xx|xx

    ich hab es jetz geteilt und er gibt mir die werte untereinander aus aber eben auch als char* blos ich hätte diese gerne in einem int array damit ich einzeln auf sie zugreifen kann und damit rechnen ect.

    wenn ich jetzt deinen vorschlag verwende bekomm ich die speicheradresse und die nützt mir leider nicht viel, aber danke für die hilfe xD.

    Ich hab auch schon probiert die funktion so umzubauen das sie statt char* int zurück gibt aber dann meckert der compiler beim "return 0" rum.

    hier is ein snippet was ich momentan da stehn hab:

    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
    29
    30
    31
    
    void _tmain()
    {
        int z;
        HBITMAP hbmp = LoadPicture("c:\\pic.bmp",0,0,z,0,0);
        char *answer="";
        answer = ImageSearch(0,0,1280,1024,"C:\\pic.bmp");
     
        int *cToi;
        GetCursorPos(&pt);
     
        char *blubb[sizeof(strtok(answer, "|"))];
        if(sizeof(blubb) > 0)
        {
            blubb[0] = strtok(answer, "|"); // Splits spaces between words in str
            printf ("%s\n",blubb[0]); // Writes "this"
            for(int i = 1; i < sizeof(strtok(answer, "|")); i++)
            {
                blubb[i] = strtok (NULL, "|");
                printf ("%s\n",blubb[i]); // Writes "is"
                
            }
        }
        
        cToi = (int *)blubb;
     
        cout << "img: "<<cToi<<"\n";
        cout << "mouseX: "<<pt.x<<" mouseY: "<<pt.y<<"\n";
        getchar();
        return;
        
    }

    gruss
    Geändert von BlackPsycho (26.07.11 um 12:40 Uhr)
     

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Mein "Vorschlag" vorher war nicht wirklich ernst gemeint.
    Aber inzwischen hab ich verstanden, was du vorhast.

    Code cpp:
    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
    
    int *umspeichern(char *x, int *anz)
    {
        int *ret;
        int i, j;
        j = strlen(x); *anz = 0;
        for (i = 0; i < j; i++)
        {
            if (x[i] == '|') *anz++;
        }
        if (j > 0) *anz++;
        ret = (int *) malloc(sizeof(int) * (*anz));
        if (ret == NULL)return NULL;
        j = 0;
        for (i = 0; i < *anz; i++)
        {
            ret[i] = 0;
            while (x[j] != '|')
            {
                 ret[i] = ret[i] * 10 + (x[j] - '0');
                 j++;
            }
            j++;
        }
        return ret;
    }
    Ungetestet.

    Der erste Parameter ist der String.
    Der zweite Parameter bruahct die Adresse (&...) von einem int, in dem am Schluss die Anzahl der ints im Array steht. Da muss also am Anfang noch nichts drin sein.
    Der Returnwert ist das Array, oder im Fehlerfall NULL.

    Danach das free(...) nicht vergessen.

    Gruß
    Geändert von sheel (26.07.11 um 13:54 Uhr)
     

  6. #6
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    sorry wenn ich mich dumm anstelle kannst du mir vll bitte ein bsp. liefern bei mir läuft das immer auf nen crash raus .

    ich hab das so gemacht:

    Code :
    1
    2
    3
    4
    5
    6
    7
    
    int* cToi;
     
    umspeichern(answer, cToi);
        
    cout << "img: "<<cToi<<"\n";
     
    free(cToi);

    und es folgt gleich ein crash wenn ich das programm starte :/

    danke
    Geändert von BlackPsycho (26.07.11 um 13:29 Uhr)
     

  7. #7
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    
    int* array;
    int anz;
     
    array = umspeichern(answer, &anz);
        
    //array hat die Werte, anz die Anzahl der Werte
     
    free(array);
     

  8. #8
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    danke, aber das selbe in grün.

    es taucht kurz ne zahl "-858993460" auf dann gibts nen crash .
    ich hab keine ahnung was ich falsch machen könnte.
    hab dein beispiel sogar so kopiert und ich crashe trotzdem.

    jetz bringt mein compile diese meldung: "warning C4715: "umspeichern": Nicht alle Steuerelementpfade geben einen Wert zurück."

    bin langsam mitn latein am ende
    Geändert von BlackPsycho (26.07.11 um 13:52 Uhr)
     

  9. #9
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hehe, da hab ich doch glatt das letzte Return vergessen
    Hab die Funktion oben geändert, kopier sie nochmal
     

  10. #10
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    das return hab ich schon mit hand reingeschrieben gehabt .
    bekomm aber auch nur ne speicheradresse und keine werte
     

  11. #11
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Öhm...aber das ist doch ein Array...

    Wenn du das
    Code cpp:
    1
    
    cout << "img: "<<array<<"\n";
    machst, musst du ja eine Adresse bekommen.
    Das ist ganz normal.

    Die einzelnen Elemente sind dann array[0], array[1]...
    Wieviele es sind, steht in anz.
     

  12. #12
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    arg stimmt ja .
    wenn ich array[0] ausgeben lass bekomm ich immer -858993460 <-- so ne zahl das selbe is mit [1]-[4]

    irgendwas stimmt da ned hmm..

    answer wird so erstellt:

    Code :
    1
    
    sprintf_s(answer,"1|%d|%d|%d|%d",locx,locy,image_width,image_height);
    Geändert von BlackPsycho (26.07.11 um 14:12 Uhr)
     

  13. #13
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Dann werd ich jetzt selber den Compiler anmachen und schauen, was da los ist.

    Melde mich dann wieder

    edit: So, jetzt ist es auch getestet

    Code cpp:
    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
    
    int *umspeichern(char *x, int *anz)
    {
        int *ret;
        int i, j;
        j = strlen(x); *anz = 0;
        for (i = 0; i < j; i++)
        {
            if (x[i] == '|') (*anz)++;
        }
        if (j > 0) (*anz)++;
        ret = (int *) malloc(sizeof(int) * (*anz));
        if (ret == NULL) return NULL;
        j = 0;
        for (i = 0; i < *anz; i++)
        {
            ret[i] = 0;
            while (x[j] != '|' && x[j] != '\0')
            {
                 ret[i] = ret[i] * 10 + (x[j] - '0');
                 j++;
            }
            j++;
        }
        return ret;
    }

    Gruß
    Geändert von sheel (26.07.11 um 14:18 Uhr)
    BlackPsycho bedankt sich. 

  14. #14
    BlackPsycho BlackPsycho ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    18
    vielen dank jetz gehts
     

Ähnliche Themen

  1. problem mit funktion
    Von sugar im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 20.01.11, 13:12
  2. Problem mit Funktion
    Von kevkev im Forum PHP
    Antworten: 3
    Letzter Beitrag: 26.06.05, 20:06
  3. Problem mit ln (LN) Funktion
    Von Bernsch im Forum Smalltalk
    Antworten: 4
    Letzter Beitrag: 08.11.04, 20:08
  4. Problem mit Funktion (do-while)
    Von pxlArtizzt im Forum PHP
    Antworten: 1
    Letzter Beitrag: 09.09.03, 14:51
  5. Problem mit der Such funktion
    Von lausi im Forum PHP
    Antworten: 2
    Letzter Beitrag: 08.08.03, 10:15