Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash 8

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 25-08-2006, 10:56   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 24
Alpha aus BitmapData entfernen

Hi,
hat jemand ne Idee wie ich einem BitmapData Objekt die Pixel entnehme, die den Alphawert 0 haben? Habs mit Kopieren und Filtern probiert, aber irgendwie klappt das nicht. Das fertige BitmapData Objekt soll dann in einem MovieClip als Maske dienen. Leider werden die transparenten Pixel bisher immer zur Maske dazugerechnet, deswegen müssen die raus

Danke vorab !
Fraenky ist offline   Mit Zitat antworten
Alt 25-08-2006, 11:11   #2 (permalink)
liebt Skorpionin
 
Benutzerbild von Skorpion
 
Registriert seit: Apr 2003
Beiträge: 1.258
myBitmapData.getPixel32()

...liefert Farbwerte und Alpha-Wert.
Skorpion ist offline   Mit Zitat antworten
Alt 25-08-2006, 12:29   #3 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 24
Stimmt, Doku lesen hilft.
Wobei eine Iteration über alle Pixel doch recht Ressourcenlastig ist, oder? Gibts nicht auch ne Möglichkeit, die etwas schneller läuft? Mein BitmapData hat eh nur schwarze Flächen. Irgendein Kopierfilter, der alle schwarzen Pixel kopiert und den Rest weg lässt, wäre mein Gedanke.
Fraenky ist offline   Mit Zitat antworten
Alt 25-08-2006, 12:36   #4 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
bitmapdata.threshold
michael ist offline   Mit Zitat antworten
Alt 25-08-2006, 12:44   #5 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
bin mir uber die problem stelung nicht ganz im klaren
aber versuchs mall damit :

http://www.actionscript.org/forums/s...ghlight=screen
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 25-08-2006, 13:39   #6 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 24
Danke für das Beispiel Xeef, das kommt meiner Idee auch schon recht nah.
Das über die threshold Funktion zu lösen habe ich auch schon probiert.

Code:
var mask:BitmapData = new BitmapData(meinSWBitmap.width,meinSWBitmap.height,true,0);
mask.threshold(meinSWBitmap, new Rectangle(0,0, meinSWBitmap.width,meinSWBitmap.height), new Point(0,0), '==', 0xFF000000,0xFF000000);
Damit erhalte ich ein Bitmap das nur noch schwarze Flächen enthält, soweit wunderbar. Wenn ich nun aber dieses Bitmap an einen MovieClip attache und diesen MovieClip als Maske verwende, wird der komplette MovieClip als Maske verwendet, da die weißen Stellen auf Alpha 0 sind :-/
Code:
mymask_mc.attachBitmap(mask,1);
myimage_mc.setMask(mymask_mc);
Hoffe ich konnte mein Problem nun etwas deutlicher machen

Geändert von Fraenky (25-08-2006 um 13:41 Uhr)
Fraenky ist offline   Mit Zitat antworten
Alt 25-08-2006, 14:06   #7 (permalink)
Neuer User
 
Benutzerbild von Xeef
 
Registriert seit: Sep 2004
Ort: Spain/Ibiza
Beiträge: 942
ich hab auch rumprobiert und bin zum schluss gekomen das du es mit MC nicht machen kanst
heist welche alpha werte im bitmap drinstehen scheint eine maske nicht zu juken

wirst mit bitmaps arbeiten mussen ohne die benutzung von
_mc.setMask()
__________________
Languages : (in the order of knowledge/preference)
Read: Flash AS, PHP, JS, Html, DHtml, Basic, C++, DOS, 3DMaxScript, English, Deutsch, Magyar, XML, Pascal, VB, Spanish
Write: Flash AS, Basic, PHP, JS, DHtml, Html, ..., C++, ...., ..., English, ..., ..., ..., ...., Deutsch, ..., Magyar

wen du mein deutsch nicht magst whele eine andere sparache von den obrigen ;)
Xeef ist offline   Mit Zitat antworten
Alt 25-08-2006, 14:22   #8 (permalink)
Knopfmaler
 
Benutzerbild von Aerks
 
Registriert seit: Nov 2004
Ort: Essen
Beiträge: 227
Mahlzeit zusammen,

bin mir nicht ganz sicher ob Dir das hilft, aber man kann ja mit

bitmapInstance.copyChannel(sourceBitmap:BitmapData , sourceRect:Rectangle, destPoint:Point, sourceChannel:Number, destChannel:Number) : Void

prima zwischen den einzelnen ARGB-Kanälen hin- und her kopieren.

Wenn du z.B. also keinen Alpha willst, dann kopier einfach ein Rechteck (voller 0xFF) aus einem anderen Bitmap direkt in den Alpha deines Zielbitmaps rein.

Viele Gruesse
=:] Aerks
__________________
______________________________________________
www.rgblaster.de
Aerks ist offline   Mit Zitat antworten
Alt 29-08-2006, 15:38   #9 (permalink)
Neuer User
 
Registriert seit: Aug 2003
Beiträge: 24
So habs nun etwas anders gelöst und will euch das nicht vorenthalten. Anstatt eine Maske zu verwenden habe ich meinen MovieClip in ein BitmapData Objekt gezeichnet und meine Maske (BitmapData Objekt mit schwarzen Flächen) darauf angewendet.

Code:
myImageBitmap.threshold(maskBitmap, new Rectangle(0,0, maskBitmap.width,maskBitmap.height), new Point(0,0), '<', 0xff000000,0x00);
mit attachBitmap auf meinen Ursprungsclip war der Fall erledigt
Danke für Eure Ideen.

Grüße Fraenky
Fraenky ist offline   Mit Zitat antworten
Alt 07-12-2006, 15:42   #10 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 14
Ich habe gerade ein ähnliches Problem, an dem ich seit 3 Tagen sitze, ohne wirklich voranzukommen.
Ich habe 2 Bilder jeweils in einem mc. Diese mcs liegen übereinander. Was ich versucht habe, ist, dass man in dem oberen Bild "herumradieren" kann bzw. das Bild auch wieder "zurückmalen" kann. Letzteres ist wohl der schwierigere Part.

Mein Ansatz war ein mc mit einem BitmapData Objekt, den ich als Maske auf das obere Bild angewandt habe. Das hat wegen der Alphawert 0 Geschichte nicht funktioniert, d.h. die Maske wurde immer auf die gesamte Bitmapgröße angewandt egal was ich drinnen "gelöscht" habe.
Ich habe es auch mal ganz simpel mit blendMode (maske -> erase, unteres bild -> layer) versucht, funktiontiert aber scheinbar auch nicht mit Bildern.

threshold() ist mir immer noch ein mittelgroßes Rätsel, aber soweit ich Fraenky folgen konnte, wäre die "Maskierung" seiner Problemlösung wohl nicht rückgängig machbar? Oder habe ich da was falsch verstanden?
jotox ist offline   Mit Zitat antworten
Alt 08-12-2006, 00:57   #11 (permalink)
Neuer User
 
Registriert seit: Dec 2002
Beiträge: 14
Nach stundenlangem Suchen doch noch eine Lösung gefunden

Mit threshold kam ich zu keinem befriedigenden Ergebnis, mit copyChannel auch nicht, dafür mit copyPixels.

PHP-Code:
bitmap_maskiert.copyPixels(bitmap_bildbitmap_bild.rectanglebitmap_maskiert.rectangle.topLeftbitmap_maskebitmap_maske.rectangle.topLeft); 
Das obere Bild liegt dabei in der Bibliothek und wird mit loadBitmap() verfügbar gemacht. Die eigentliche Maske besteht nur noch als BitmapData, in dem herumgemalt und radiert werden kann. Mit Hilfe von copyPixels() werden dann alle Pixel des Bildes mit den Alphawerten der Maske in ein neues BitmapData kopiert und dann für die Darstellung an einen mc gehängt. Fertig!
Damit wird sogar der weiche Rand des Malwerkzeugs berücksichtigt und keine die Sache läuft sauber

Ich bin begeistert!

(Mit copyChannel hätte es eigentlich einfacher gehen müssen, aus irgendwelchen Gründen hats aber gar nicht gefunzt.)
jotox ist offline   Mit Zitat antworten
Alt 21-11-2007, 09:39   #12 (permalink)
heide
 
Registriert seit: Nov 2001
Ort: wiesbaden
Beiträge: 114
kannst auch einfach die maske und den mc auf cacheAsBitmap stellen...dann gehts auch glaubich...
fusi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele