1Danke
ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
203
203
EMPFEHLEN
-
25.07.11 23:12 #1
- 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 hilfeGeändert von BlackPsycho (25.07.11 um 23:14 Uhr)
-
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.
-
Kannst du mir da ein Beispiel geben, wie sowas ausschaut?aber sie gibt nur char zurück mit trennungszeichen |.
-
26.07.11 12:36 #4
- 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; }
grussGeändert von BlackPsycho (26.07.11 um 12:40 Uhr)
-
Mein "Vorschlag" vorher war nicht wirklich ernst gemeint.
Aber inzwischen hab ich verstanden, was du vorhast.
Ungetestet.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; }
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)
-
26.07.11 13:20 #6
- 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)
-
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);
-
26.07.11 13:46 #8
- 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)
-
Hehe, da hab ich doch glatt das letzte Return vergessen

Hab die Funktion oben geändert, kopier sie nochmal
-
26.07.11 13:58 #10
- 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
-
Öhm...aber das ist doch ein Array...
Wenn du das
machst, musst du ja eine Adresse bekommen.Code cpp:1
cout << "img: "<<array<<"\n";
Das ist ganz normal.
Die einzelnen Elemente sind dann array[0], array[1]...
Wieviele es sind, steht in anz.
-
26.07.11 14:06 #12
- 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)
-
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)
-
26.07.11 14:23 #14
- Registriert seit
- May 2007
- Beiträge
- 18
vielen dank jetz gehts
Ähnliche Themen
-
problem mit funktion
Von sugar im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 20.01.11, 13:12 -
Problem mit Funktion
Von kevkev im Forum PHPAntworten: 3Letzter Beitrag: 26.06.05, 20:06 -
Problem mit ln (LN) Funktion
Von Bernsch im Forum SmalltalkAntworten: 4Letzter Beitrag: 08.11.04, 20:08 -
Problem mit Funktion (do-while)
Von pxlArtizzt im Forum PHPAntworten: 1Letzter Beitrag: 09.09.03, 14:51 -
Problem mit der Such funktion
Von lausi im Forum PHPAntworten: 2Letzter Beitrag: 08.08.03, 10:15





Zitieren

Login






