Frage wegen kopieren(memcpy??)



  • Hallo an allen ,
    ich habe folgendes Problem und zwar ,ich habe einen Códe der ein Bild und einen Wert als Eingabe bekommt und das Original Bild veraendert!
    Ich will aber dass das veraendete Bild nicht in das Original (In) sondern in einem andere Ort(Out).Ich kenne mich mit solchen Funktionen nicht aus(memcpy,usw),kann mir jemand helfen?

    void SaltPepper(struct Image *In,float PROPABILITY)
    {

    int x,y,DATA,DATA1,DATA2;
    float NOISE;
    DATA=(int)(PROPABILITY*32768/2);
    DATA1=DATA+16384;
    DATA2=16384-DATA;
    for(y=0; y<In->Rows; y++)
    for(x=0; x<In->Cols; x++)
    {
    DATA=rand();
    if(DATA>=16384 && DATA<DATA1)

    (In->Data+x+(long)yIn->Cols)=0;

    if(DATA>=DATA2 && DATA<16384)

    (In->Data+x+(long)yIn->Cols=255;

    }
    }

    Ich habe es versucht mit einem Zeiger(Temp) das zu machen aber ich weiss es nicht ob es richtig ist(das Ergebnis ist nicht korrekt!)Hier ist der Code ,den ich geschrieben habe
    void SaltPepper(struct Image *In,struct Image *Out,float PROPABILITY)
    {

    int x,y,DATA,DATA1,DATA2;
    float NOISE;
    unsigned char tmp;
    DATA=(int)(PROPABILITY
    32768/2);
    DATA1=DATA+16384;
    DATA2=16384-DATA;
    for(y=0; y<In->Rows; y++)
    for(x=0; x<In->Cols; x++)
    {
    DATA=rand();
    tmp=(unsigned char*) malloc(sizeof(unsigned char*));
    if(DATA>=16384 && DATA<DATA1)
    {
    tmp=Out->Data+x+(long)y*Out->Cols;
    *tmp=0;
    }
    if(DATA>=DATA2 && DATA<16384)
    {

    tmp=Out->Data+x+(long)y*Out->Cols;
    *tmp=255;
    }
    }
    }

    Meint jemand dass es anders funktionieren kann?



  • also, das "leute, die mir antworten"- finden würde mit benutzung der codetags jedenfalls extrem viel besser funktionieren, denn das da kann kaum einer dechiffrieren, was du da geschrieben hast. also: nochmaaaaaaaaaal.



  • scrub schrieb:

    also, das "leute, die mir antworten"- finden würde mit benutzung der codetags jedenfalls extrem viel besser funktionieren, denn das da kann kaum einer dechiffrieren, was du da geschrieben hast. also: nochmaaaaaaaaaal.

    und ganz schön eingerückt



  • Bitte nicht böse sein, aber ein paar nützliche Hinweise:

    1. lerne Zeigerarithmetik
    2. verstehe den Unterschied zw. flachen und tiefen copy
    3. geb deinen Variablen ordentl. Namen; DATA1 DATA2 tsssssssss
    4. verstehe den Unterschied zw. character, c-strings und char vektoren
    5. dein malloc ist völlig überflüssig, vermeide es objekte auf den heap anzulegen und wenn doch solltest du den speicher wieder freigeben
    6. benutze bei lok. Variablen niemals Grossbuchstaben

    bye



  • Gut danke fuer die Hinweise aber ich wollte eigentlich ein bisschen Hilfe was das Programm angeht,ich probiere es mit einem anderen Beispiel.Das gleiche gilt wie am Anfang(erste Frage) ob es Richtig ist so oder anders(weiter unten geschrieben)

    void Uniform(struct Image *In,float VAR,float MEAN)
    {
    int x,y;
    float noise;

    for(y=0; y<In->Rows; y++)
    for(x=0; x<In->Cols; x++)
    {
    noise=sqrt((double)VAR)
    *1.057192E-4*(float)rand()
    +MEAN-sqrt((double)VAR)
    *1.7320508;
    if(noise>255)
    noise=255;
    if(noise<0)
    noise=0;
    (In->Data+x+(long)yIn->Cols=(unsigned char)(NOISE + .5);
    }
    }

    So ist der Code mit Hilfe von Zeiger(temp)
    void Uniform(struct Image *In,struct Image *Out,float VAR,float MEAN)
    {
    int x,y;
    float noise;
    unsigned char temp;
    for(y=0; y<In->Rows; y++)
    for(x=0; x<In->Cols; x++)
    {
    NOISE=sqrt((double)VAR)
    *1.057192E-4*(float)rand()
    +MEAN-sqrt((double)VAR)
    1.7320508;
    if(noise>255)
    NOISE=255;
    if(noise<0)
    NOISE=0;
    temp=(unsigned char
    ) malloc(sizeof(unsigned char
    ));
    temp=In->Data+x+(long)y*In->Cols;
    *temp=(unsigned char)(NOISE + .5);
    }
    }
    Ist das so Richtig? Wenn nicht bitte Hilfe-Hinweise geben wie ich das machen koennte?Was Zeiger angeht werde ich versuchen besseer zu verstehen aber so ein einfachhes Thema ist es auch nicht!Wenn jemand etwas weiss wie man es am besten lernt(Seiteoder Buch) hier damit!SOnst bedanke ich mich an allen für Hilfe
    Gruss
    kilomat

    ps:Das Aussehen des Codes(alles so eng)liegt nicht an mir!!



  • Verwende /*bitte*/ die C/C++ Codet. //dann wirds übersichtlicher
    (für Alle):bulb:....
    


  • sfds



  • @kingruedi kann man hier seine texte auch rechtsbündig oder zentriert ausgeben?


Log in to reply