Paint-App

Z

Zonnex

Erfahrenes Mitglied
49
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:
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:
  • Danke
Reaktionen: Zonnex
Super funktioniert fehlerfrei!

Danke :)
 
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:
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
 
  • Danke
Reaktionen: Zonnex
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)
pfadbitmap.jpg


Mfg
Oli
 
Zuletzt bearbeitet:

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
R
  • Robby1950
2
Antworten
23
Aufrufe
1.022
Robby1950
R
netfreak
  • netfreak
Antworten
10
Aufrufe
461
netfreak
netfreak
Zurück
Oben Unten