• beyond tellerrand – play. Register Now!
Zurück   Flashforum > Flash > Flash Fortgeschritten > Flash CS3 Professional

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-01-2009, 10:40   #1 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 292
BitmapData veraendern

Hi zusammen

ich stehe nun seit Tagen vor einem Problem und finde einfach den Fehler nicht.

Folgendes:

Ich erstelle zunächste bei MOUSE_DOWN einen MovieClip, in dem ich die Mausbewegung als Grafik speichern möchte.
Code:
childMarkieren = new MovieClip();
							childMarkieren.transform.colorTransform = color_trans_markierung;
							childMarkieren.alpha = 0.4;
							//add container for saving mousemovement inside
							containerMarkieren.addChild(childMarkieren);
							childMarkieren.graphics.lineStyle (30, 0xeeeeee, 0.4);
							//childMarkieren.graphics.beginFill(0xeeeeee);
							childMarkieren.graphics.moveTo (childMarkieren.mouseX, childMarkieren.mouseY);
bei MOUSE_MOVE passiert nicht mehr als die Bewegung nachzuzeichnen
Code:
childMarkieren.graphics.lineTo(childMarkieren.mouseX, childMarkieren.mouseY);

bei MOUSE_UP erstelle ich aus dem MC ein BitmapData Objekt, erzeuge daraus eine Bitmap die ich anzeige:

Code:
									myBitmapData = new BitmapData (containerMarkieren.width, containerMarkieren.height, true, 0x00FFFFFF);
									
									myBitmapData.draw(childMarkieren, null, color_trans_markierung, null, null, false);
									childMarkieren.visible = false;
									
									bm = new Bitmap(myBitmapData);
									containerMarkieren.addChild(bm);
das funktioniert alles wie es soll!

So nun das Problem:

Ich moechte jetzt (in einem anderen "modus") aus der BitmapData Pixel verändern.

Das habe ich nun (im letzen Versuch) so versucht:

Die Mausbewegung speichere ich in einem anderen MovieClip childRadieren.
Diesen adde ich ebenfalls an ContainerMarkieren.

Dann habe ich versucht durch alle Pixel zu loopen und sie auf transparent zu setzen. Geht nicht.

Ich habe auch versucht, einfach per Blendmode das eine über das andere Objekt zu legen. Es funktioniert nichts!!

Hat jemand Erfahrung damit? Ich dreh echt durch
chrissy810 ist offline   Mit Zitat antworten
Alt 18-01-2009, 16:33   #2 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
mir ist nicht klar, was du machen möchtest? transparent radieren?

sowas?
http://www.seibsprogrammladen.de/fra...ispiele/flash8
-> draw_trans_in_mc
Ein mc in ein BitmapData und transparent darauf zeichnen.
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 18-01-2009, 17:59   #3 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 292
ja genau das und ich bin zu bescheuert es auf meine beduerfnisse anzupassen.

also hier nochmal ein bisschen strukturierter:

onMouseDown

PHP-Code:

childMarkieren
.transform.colorTransform color_trans_markierung;
                            
childMarkieren.alpha 0.4;
                            
                            
containerMarkieren.addChild(childMarkieren);
                            
containerMarkieren.addChild(childRadieren);

                            if (
markierenUndo){
                                
childRadieren.graphics.lineStyle (3000);
                                
childRadieren.graphics.moveTo (childRadieren.mouseXchildRadieren.mouseY);
                            }
                            else{
                                
childMarkieren.cacheAsBitmap true// ohne das hat die linie kein antialising
                                
childMarkieren.graphics.lineStyle (300xeeeeee0.4);
                                
childMarkieren.graphics.moveTo (childMarkieren.mouseXchildMarkieren.mouseY);
                            } 
childMarkieren enthaelt quasi meine gezeichnete linie. childRadieren enthaelt die linie die der radierten flaeche entsprechen soll.

dann bei MouseMove:

PHP-Code:
if (markierenDo){
                            
childMarkieren.graphics.lineTo(childMarkieren.mouseXchildMarkieren.mouseY);
                            
myBitmapData.draw(childMarkierennullcolor_trans_markierungnullnullfalse);
                        }
                        else{
                            
childRadieren.graphics.lineTo(childRadieren.mouseXchildRadieren.mouseY);
                            
myBitmapData.draw(childRadieren, new Matrix(), null"erase"nullfalse);
                        
                        } 
das heisst entweder lege ich die gezeichnete linie in die bitmap oder den radierten teil transparent drueber (das ist das ziel wneigstens )

und dann onmouseup is eigentlich erstmal unwichtig, denn das ganze soll ja dynamisch passieren..

aber es geht einfach nicht

seht ihr meinen fehler?
chrissy810 ist offline   Mit Zitat antworten
Alt 18-01-2009, 18:06   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
die bitmap muss beim erzeugen transparent angelegt werden. nachträglich kann man das nicht mehr ändern.
dann kann man ARGB (alpha-Rot-Grün-Blau) punkten.

flash-hilfe:
BitmapData () Konstruktor
public function BitmapData(width:int, height:int, transparent:Boolean = true, fillColor:uint = 0xFFFFFFFF)
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 18-01-2009, 18:09   #5 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 292
sorry die zeile hab ich vergessen:

die erzeuge ich mit transparenz:

PHP-Code:
var myBitmapData:BitmapData = new BitmapData (stage.stageWidthstage.stageHeighttrue0x00FFFFFF); 
chrissy810 ist offline   Mit Zitat antworten
Alt 18-01-2009, 18:11   #6 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 292
ich mein es ist as3, aber die funktionen muessten doch (abgesehen von der syntax) dem beispiel entsprechen.. was mache ich bloß falsch??
chrissy810 ist offline   Mit Zitat antworten
Alt 18-01-2009, 19:00   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
das z.b. geht:
neue fla und
Code:
var bitmap:BitmapData = new BitmapData(200, 200, true, 0x55FF0000);
var bitmap_mc:Bitmap = new Bitmap(bitmap);
addChild(bitmap_mc);
//
var temp:Sprite = new Sprite();
temp.cacheAsBitmap = true;// ohne das hat die linie kein antialising
temp.graphics.lineStyle(8, 0);
temp.graphics.moveTo(10, 10);
temp.graphics.lineTo(190, 190);
bitmap.draw(temp, null, null, BlendMode.ERASE);
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (18-01-2009 um 19:02 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 18-01-2009, 19:12   #8 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 292
ja das geht auch.

das liegt an der dynamik.

ich kann das schon genauso so uebernehmen. aber es funktioniert halt nciht wenn ich das an die mausbewegung binde.
chrissy810 ist offline   Mit Zitat antworten
Alt 18-01-2009, 19:44   #9 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
Code:
var bitmap:BitmapData = new BitmapData(200, 200, true, 0x55FF0000);
var bitmap_mc:Bitmap = new Bitmap(bitmap);
addChild(bitmap_mc);
//
var altX:Number;
var altY:Number;
var paintis:Boolean=false
stage.addEventListener(MouseEvent.MOUSE_MOVE, fMOUSE_MOVE);
//
function fMOUSE_MOVE(e:MouseEvent):void {
  if (paintis) {
    var temp:Sprite = new Sprite();
    temp.cacheAsBitmap = true;// ohne das hat die linie kein antialising
    temp.graphics.lineStyle(4, 0);
    temp.graphics.moveTo(altX, altY);
    temp.graphics.lineTo(e.localX, e.localY);
    bitmap.draw(temp, null, null, BlendMode.ERASE);
  }
  paintis=true;
  altX=e.localX;
  altY=e.localY;
}
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 18-01-2009, 23:53   #10 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 292
danke dir! habs jetzt.

noch eine sache..

wenn ich bei mouseup folgendes adde:

bitmap.draw(childMarkieren, null, color_trans_markierung, "normal", null, null);
bitmap2 = new Bitmap(bitmap);
addChild(bitmap2);
containerMarkieren.removeChild(childMarkieren);
markisSet = true;

dann wird von mal zu mal dass dieser codeabschnitt aufgerufen wird, die farbe ein bisschen dunkler.

wird gesetzt durch color_trans_markierung.color=0xe30056; in abhaengigkeit von der auswahl durch den benutzer.

mein mc (der mousedraw) der in die bitmap umgewandelt wird, hat zu beginn einen alphawert von 0.4 (childMarkieren.graphics.lineStyle (30, color_trans_markierung.color, 0.4);
und der color_trans_markierung wert wird ja im draw() mit uebergeben. ich verstehe nicht woran es liegt dass die farbe dunkler wird. erst dachte ich, es laege sich jeweils der mc doch irgendwie drueber, aber es wird einfach die gesetzte farbe dunkler.

vielleicht hast du oder jemand ja eine idee. ich wollte das hier garnicht fragen aber vielleicht sitz ich heute schon zu lange als dass ich noch irgendetwas sehen wuerde, was bestimmt offensichtlich ist...

Geändert von chrissy810 (19-01-2009 um 00:14 Uhr)
chrissy810 ist offline   Mit Zitat antworten
Alt 19-01-2009, 01:05   #11 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
ohne etwas sehen zu können ..

wenn's immer dunkler wird, dann wirst du schon irgend was addieren?
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 19-01-2009, 11:17   #12 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 292
onMouseDown
PHP-Code:
childMarkieren = new MovieClip();
                            
containerMarkieren.addChild(childMarkieren);
                            
                            
                            if (
markierenDo) {
                                
                            
childMarkieren.graphics.lineStyle (30color_trans_markierung.color0.4);
                            
childMarkieren.graphics.moveTo (childMarkieren.mouseXchildMarkieren.mouseY);
                            
markierenUndo false;
                            
                            } 
onMouseMove

PHP-Code:
childMarkieren.graphics.lineTo(childMarkieren.mouseXchildMarkieren.mouseY);
                        
                        
                        if (
markierenUndo){
                          if (
markisSet) {
                              
                                
                                var 
temp:Sprite = new Sprite();
                                
temp.cacheAsBitmap true;// ohne das hat die linie kein antialising
                                
temp.graphics.lineStyle(200);
                                if (!
altXtemp.graphics.moveTo(mouseXmouseY);
                                else 
temp.graphics.moveTo(altXaltY);
                                
temp.graphics.lineTo(mouseXmouseY);
                                
bitmap.draw(tempnullnull"erase");
                              
                          }
                          
                          
altX=childMarkieren.mouseX;
                          
altY=childMarkieren.mouseY;
                        } 
onMouseUp

PHP-Code:
stage.removeEventListener(MouseEvent.MOUSE_MOVEmouseMoveInfo);
                        
                        if (
markierenDo){

                            
bitmap.draw(childMarkierennullcolor_trans_markierung"normal"nullnull);
                            
bitmap2 = new Bitmap(bitmap);
                            
addChild(bitmap2);
                            
containerMarkieren.removeChild(childMarkieren);
                            
markisSet true;
                        
                        } 
chrissy810 ist offline   Mit Zitat antworten
Alt 19-01-2009, 17:21   #13 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.109
was mache ich jetzt mit den 3 script-fragmenten?
__________________
die ultimative antwort auf alle programmierfragen: der debugger!
- vor eine programmzeile klicken (==roter punkt)
- im menü "debuggen" aufrufen
- auf den grünen pfeil klicken
- im swf etwas machen (der programmablauf hält beim roten punkt)
- links die objekte auswählen, variable, interne... mal alles ansehen!
mit dem debugger kann man sein programm schrittweisse abarbeiten und in alle variable reinsehen.

mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 19-01-2009, 17:23   #14 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 292
und wenn ich mal testweise
PHP-Code:
addChild(childMarkieren);
                            
childMarkieren.500;
                            
bitmap.draw(childMarkierennullcolor_trans_markierung"normal"nullfalse);
                            
bitmap2 = new Bitmap(bitmap);
                            
addChild(bitmap2);
                            
//containerMarkieren.removeChild(childMarkieren);
                            
markisSet true
den mc nicht remove und dafuer versetzt adde, dann wird der korrekt angezeigt, das heisst immer transparent und pro durchgang kommt ein neues element dazu. nur die bitmap wird jeweils eine stufe dunkler...
chrissy810 ist offline   Mit Zitat antworten
Alt 19-01-2009, 17:26   #15 (permalink)
Neuer User
 
Registriert seit: Dec 2005
Beiträge: 292
naja ich dachte du siehst sie dir mal an, denn wenn etwas zu viel adden, dann hier, das sind die die aufgerufen werden und mit meinem problem zu tun haben, auf deine mail von wegen du sagst jetzt mal was ohne was zu sehen. ich dachte du siehst jetzt vielleicht was..
chrissy810 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 22:43 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele