1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Paint-App

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Zonnex, 09.07.2010.

  1. Zonnex, 09.07.2010 #1
    Zonnex

    Zonnex Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    431
    Erhaltene Danke:
    49
    Registriert seit:
    12.09.2009
    Da so eine App viele verschiedene Themen beinhaltet dachte ich mir ich nehmen den Thread um neue Fragen zu stellen, evtl. können dann später andere Anfänger hierraus auch einiges ableiten.

    Aktuelle Frage:
    Koordinatenbestimmung (Seite 1, 11.07.2010)

    Erledigte Fragen:
    Farbmanipulation beim Bitmap's (Seite 1, 09.07.2010)

    Hi arbeite grad an einer Paint-App und bin dabei Pinsel einzubinden...

    bisher hab ich 3 verschiedene Pinsel zum testen... Dabei handelt es sich um png-Dateien mit Alpha. Mit schwarz habe ich einfache Formen in die Pinsel gezeichnet. Jetzt möchte ich die Farbe der Pinsel ändern und realisiere das im Moment über:

    Code:
    for(int x = 0;x < bmp.getWidth();x++)
    		        for(int y = 0;y < bmp.getHeight();y++)
    		            if(bmp.getPixel(x, y) != 0) 
    		            {
    		            	bmp.setPixel(x, y, Math.abs(bmp.getPixel(x, y) + Color.argb(0,0,0,255)));
    		            }
    
    funktioniert sogar fast perfekt nur der Bereich der im Pinsel am dunkelsten ist (ich glaub ist sogar 100% schwarz) wird hinterher wieder unsichtbar...

    Daher die Frage:
    Wie ändere ich die Farbe dieser PNG's ohne dabei den Alpha Wert zu verändern?

    Danke und Mfg
    Oli
     
    Zuletzt bearbeitet: 11.07.2010
  2. DieGoldeneMitte, 09.07.2010 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Dein Code färbt da um, wo ein Punkt NICHT schwarz ist ODER der alpha Wert !=0 ist (ich vergesse jedes Mal, ob 0 transparent oder opak ist).
    Das mit dem Math.abs scheint hier sehr falsch, weil es bei Alphaleveln über 127 Deine Bits kippt. :)

    Ich würde das mit Bitmagie auseinander sortieren, ungefähr so:

    Code:
    int old = bmp.getPixel(x,y);
    int oldalpha = old & 0xff000000;
    int oldcolor= old & 0x00ffffff;
    if( oldcolor == 0 ) { // die schwarzen ändern!
      int newcolor = Color.argb(0,0,0,255);
      bmp.setPixel( x, y, oldalpha | newcolor );
    }
     
    Zuletzt bearbeitet: 09.07.2010
    Zonnex bedankt sich.
  3. Zonnex, 09.07.2010 #3
    Zonnex

    Zonnex Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    431
    Erhaltene Danke:
    49
    Registriert seit:
    12.09.2009
    Super funktioniert fehlerfrei!

    Danke :)
     
  4. Zonnex, 11.07.2010 #4
    Zonnex

    Zonnex Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    431
    Erhaltene Danke:
    49
    Registriert seit:
    12.09.2009
    Neue Frage:

    Über eine OnTouch Methode und event.getY()/event.getX() lasse ich im Moment den Pinsel "zeichnen".. jedoch reagiert diese Methode zu zähflüssig, sprich bei schnellen hin und her wischen entstehen große Lücken zwischen einzelnen Punkten. In den auf den market erhältlichen Apps gibt es das Problem nicht, kann mir jemand sagen wie die das gelöst haben?

    Mfg
    Oli
     
    Zuletzt bearbeitet: 11.07.2010
  5. K2DaC, 11.07.2010 #5
    K2DaC

    K2DaC Junior Mitglied

    Beiträge:
    41
    Erhaltene Danke:
    12
    Registriert seit:
    04.06.2010
    kannst dir nur theoretisch erklären, weil ich grad kein code zur hand habe und es zu umfangreich wär das mal eben zu programmieren. Aber :
    Es gibt eine Art AnimateTo(x,y); methode. diese springt nicht zu dem Punkt der berührt wurde, wie es bei dir wohl der fall ist, sondern durchläuft in einer festen größe (z.b. abhängig von der Pinselgröße) die wege zwischen Punkt a und Punkt b. und zeichnet unterwegs die entsprechenden flächen aus
     
    Zonnex bedankt sich.
  6. Zonnex, 11.07.2010 #6
    Zonnex

    Zonnex Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    431
    Erhaltene Danke:
    49
    Registriert seit:
    12.09.2009
    ERstmal danke für deine Hilfe, leider funktioniert AnimateTo() nicht innerhalb einer draw...
    dafür hab ich jetz mal mit Path gearbeitet. Es funktioniert soweit ganz gut.
    Ich vermute das die meisten Paint-Apps aus dem Market nur über Path arbeiten und die dazugehörige Paint modifizieren um unterschiedliche Effekte zu erzielen.

    Jedoch würde ich gerne mit Pinseln aus Bitmaps arbeiten um auch später leicht viele verschiedene Formen hinzufügen zu können. Leider finde ich nichts wo man ne Bitmap anhand eines Path zeichnen kann... :/

    So sieht aus (grau = Pfade, Rot = Bitmap)
    [​IMG]

    Mfg
    Oli
     
    Zuletzt bearbeitet: 11.07.2010

Diese Seite empfehlen