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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 20-07-2005, 13:30   #1 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.831
Zitat:
Zitat von Alois
ach ja, noch etwas Stoff :
ActionScript:
  1. var w=myMC._width;
  2. var h=myMC._height;
  3. var greyscale = new flash.display.BitmapData(w,h,true);
  4. var bmh=this.createEmptyMovieClip("bmp_holder",3);
  5. bmh.attachBitmap(greyscale,1,"auto",true);
  6. greyscale.draw(myMC);
  7. for(var i=0;i<w;i++){
  8.         for(var j=0;j<h;j++){
  9.                 var pix=greyscale.getPixel(i,j)>>16;
  10.                 /*einfach nur den Rotanteil nutzen bringt meist
  11.                 recht gute Graustufenbilder, aber man kann natürlich
  12.                 auch eine Mischung aus rgb testen*/
  13.                 pix=pix<<16|pix<<8|pix;
  14.                 greyscale.setPixel(i,j,pix);
  15.         }
  16. }
...habs jetzt aus einer anderen Bastelei von mir rauskopiert, aber das dürfte so gehen...

Edit: Syntaxfehler entfernt
hier noch der coolere weg graustufenbilder zu erzeugen
samt script:
http://page.freett.com/isolations_ne...ad/test20.html

hab die kommentare mal nach meinem verständnis übersetzt
ActionScript:
  1. //invert
  2. var filterObj = new flash.filters.ColorMatrixFilter ();
  3. filterObj.matrix = new Array (0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0);
  4. mc.filters = [filterObj];
  5. //greyscale
  6. var filterObj = new flash.filters.ColorMatrixFilter ();
  7. filterObj.matrix = new Array (1 / 3, 1 / 3, 1 / 3, 0, 0, 1 / 3, 1 / 3, 1 / 3, 0, 0, 1 / 3, 1 / 3, 1 / 3, 0, 0, 0, 0, 0, 1, 0);
  8. mc.filters = [filterObj];
  9. //sepia
  10. var filterObj = new flash.filters.ColorMatrixFilter ();
  11. filterObj.matrix = new Array (1 / 2, 1 / 2, 1 / 2, 0, 0, 1 / 3, 1 / 3, 1 / 3, 0, 0, 1 / 4, 1 / 4, 1 / 4, 0, 0, 0, 0, 0, 1, 0);
  12. mc.filters = [filterObj];
  13. //scharfzeichnung
  14. var filterObj = new flash.filters.ConvolutionFilter ();
  15. filterObj.matrix = new Array (0, -1, 0, -1, 5, -1, 0, -1, 0);
  16. filterObj.matrixX = 3;
  17. filterObj.matrixY = 3;
  18. filterObj.bias = 0;
  19. filterObj.divisor = 1;
  20. mc.filters = [filterObj];
  21. //konturen
  22. var filterObj = new flash.filters.ConvolutionFilter ();
  23. filterObj.matrix = new Array (1, 1, 1, 1, -7, 1, 1, 1, 1);
  24. filterObj.matrixX = 3;
  25. filterObj.matrixY = 3;
  26. filterObj.bias = 0;
  27. filterObj.divisor = 1;
  28. mc.filters = [filterObj];
  29. //relief
  30. var filterObj = new flash.filters.ConvolutionFilter ();
  31. filterObj.matrix = new Array (1, 1, 0, 1, 0, -1, 0, -1, -1);
  32. filterObj.matrixX = 3;
  33. filterObj.matrixY = 3;
  34. filterObj.bias = 128;
  35. filterObj.divisor = 1;
  36. mc.filters = [filterObj];

Geändert von michael (20-07-2005 um 13:37 Uhr)
michael ist offline   Mit Zitat antworten
Alt 21-07-2005, 00:32   #2 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Zitat:
Zitat von michael
...

hab die kommentare mal nach meinem verständnis übersetzt
ActionScript:
  1. //invert
  2. var filterObj = new flash.filters.ColorMatrixFilter ();
  3. filterObj.matrix = new Array (0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0);
  4. mc.filters = [filterObj];
  5. ...
nein das ist nicht invert, da sind praktisch nur Rot- und Blaukanal vertauscht, ein Negativ geht so:
PHP-Code:
var filterObj = new flash.filters.ColorMatrixFilter ();
filterObj.matrix = new Array (-1000255
,-100255,
00, -10255,
00010);
mc.filters = [filterObj]; 
...naja, wenn Du willst kann ich Dir die matrix jetzt sogar erklären, aber eigentlich spricht das ja fast für sich (r,g,b,a,offset).
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (21-07-2005 um 00:34 Uhr)
Alois ist offline   Mit Zitat antworten
Alt 21-07-2005, 00:44   #3 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.831
ah, da das beispielbild quasi nur aus rot und blau bestand, hielt ich das für invertiert.

mit der matrix hab ich mich schon immer schwer getan
(nein, ich schlucke keine blauen pillen)
wie sind denn die 5 werte in den 15 einzuordnen?
vieleicht kram ich auch nen alten thread zu begingradienfill raus
von dir erklärt wär aber noch schöner.
auch wenn ich das dodekaeder-script bis heute nicht kapiert hab

Geändert von michael (21-07-2005 um 00:48 Uhr)
michael ist offline   Mit Zitat antworten
Alt 21-07-2005, 16:10   #4 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
...naja, die ColorMatrix ist wohl eher verwandt mit color.setTransform (da hab ich auch mal was erklärendes drüber geschrieben), anders ist halt nur, daß man jetzt nicht mit dem ursprünglichen Rotanteil den neuen Rotanteil sondern zusätzlich auch den Grün-,Blau- und Alphaanteil manipulieren kann.
Die ersten 5 Zahlen des arrays manipulieren den Rotanteil des pixels,
danach kommen 5 Zahlen für Grün,
dann 5 für Blau...
und die letzten 5 sind für alpha....
und der neue Rotanteil wird so berechnet
array[0]*(alter Rotanteil)+array[1]*(alter Grünanteil)+array[2]*(alter Blauanteil)+array[3]*(altes alpha/Transparenz)+array[4]
...und so geht das dann halt auch mit Grün, Blau und alpha.
Die Matrix sieht also so aus(im Beispiel mal die Werte für ein Negativ):
.......|*Rot+|*Grün+|*Blau+|*Alpha+|+
______________________________________
Rot...|...-1..|....0...|....0....|.....0....|..255....
______________________________________
Grün.|...0....|..-1...|....0....|.....0....|..255....
______________________________________
Blau..|...0...|...0....|..-1....|.....0....|..255....
______________________________________
Alpha|...0...|...0....|....0....|.....1....|....0. ....
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 21-07-2005, 16:20   #5 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.831
vielen dank für deine ausführungen.
ich muss das noch ein paarmal lesen bis ich verstanden habe
warum man 5 werte braucht um rotanteil des pixels zu beschreiben
michael ist offline   Mit Zitat antworten
Alt 21-07-2005, 16:51   #6 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
man muss nicht unbedingt 5 Werte haben,
aber so kann man halt mehr manipulieren, ohne den 5.Wert(den offset) könnte man z.B. kein Negativ machen, hier noch mal der link zur color.setTransform-Erklärung:
Farbe bestimmen mit color.setTransform
...der ja dem ColorMatrixFilter sehr ähnlich ist. Genau genommen entspricht
ColorObject.ra=ColorMatrixArray[0]*100
ColorObject.rb=ColorMatrixArray[4]
ColorObject.ga=ColorMarixArray[6]*100
ColorObject.gb=ColorMatrixArray[9]
ColorObject.ba=ColorMatrixArray[12]*100
ColorObject.bb=ColorMatrixArray[14]
ColorObject.aa=ColorMatrixArray[18]*100
ColorObject.ab=ColorMatrixArray[19]
...allerdings kann man mit ColorSetTransform keine Graustufenbilder...
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 21-07-2005, 17:04   #7 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.831
ahhh, gleich hab ichs aber setTransform hat 8werte die ich nachvollziehen kann. an dieser stelle hakt es noch:
Zitat:
Die ersten 5 Zahlen des arrays manipulieren den Rotanteil des pixels,
und der neue Rotanteil wird so berechnet
array[0]*(alter Rotanteil)+array[1]*(alter Grünanteil)+array[2]*(alter Blauanteil)+array[3]*(altes alpha/Transparenz)+array[4]
wie kann denn der rotanteil eines bildes über alten grünanteil verfügen? wenn ich mir in einem bildbearbeitungpropramm den roten kanal eines bildes anzeigen lasse, gibts da doch nur rotwerte von 0-255.

ich habe also jetzt mehr möglichkeiten als bei setTransfom, weil ich den rotanteil eines bildes mit einem neuen grün/blau anteil multiplizieren kann,
entsprechend grün und blau mit den jeweils anderen werten, wenn ich es richtig verstanden habe.


danke für die geduld.
michael ist offline   Mit Zitat antworten
Alt 21-07-2005, 17:19   #8 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.831
hab das mal zu einem neuen thema gemacht.
ist für sich interessant und hatte fast nichts mehr mit bitmapdata zu tun.
michael ist offline   Mit Zitat antworten
Alt 22-07-2005, 23:52   #9 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Zitat:
Zitat von michael
...
wie kann denn der rotanteil eines bildes über alten grünanteil verfügen? wenn ich mir in einem bildbearbeitungpropramm den roten kanal eines bildes anzeigen lasse, gibts da doch nur rotwerte von 0-255.
...
Ja und genau das muss man auch beachten, sie die doch die greyscale-matrix an, da wird immer 1/3 (=0.33...) des alten Rot-,Grün- und Blauwertes für den neuen Rotwert hinzugerechnet. Würde man dort jeweils den vollen Wert nehmen wäre das Ergebnis viel zu hell. Wenn das Ergebnis über 255 oder unter 0 ist wird der Wert halt als 255 oder 0 interpretiert...
...und weil es jetzt ein eigener thread ist, hier nochmal eine schöne Matrix:
PHP-Code:
//schwarzweiss
var filterObj = new flash.filters.ColorMatrixFilter ();
filterObj.matrix = new Array (
2552552550, -255*255,
 
255 ,2552550, -255*255,
 
2552552550, -255*255,
 
00010);
mc.filters = [filterObj]; 
...wenn das Bild zu hell oder zu dunkel ist, kann man das mit den Offset-Werten variieren.

btw. warum werden die matrix-Werte mit dem as-tag immer so weit rechts angezeigt?
(naja, mit dem php-tag gehts ja)
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (22-07-2005 um 23:56 Uhr)
Alois ist offline   Mit Zitat antworten
Alt 12-12-2007, 13:04   #10 (permalink)
NON
Neuer User
 
Registriert seit: May 2007
Beiträge: 4
Hallo,

der ColorMatrixFilter ist schon echt dufte,
ich würde nur gerne wissen,
wie ich ein Bild einer beliebigen RGB-Farbe nach einfärben kann.

z.B. wie in Photoshop, wenn man folgendes durchführt:
Bild -> Anpassungen -> Farbton/Sättigung, unten den Haken "Färben" sätzt und entsprechend der gesetzten/eingestellten Farbe das Bild färbt.

sämtliche Beispiele die ich über die Suche gefunden habe befassen sich mit Graustufen und leider eröffnet sich mir darüber nicht der Weg zu meiner gesuchten Lösung

Ich möchte ein Bild mit diesem "B5C1C6" Farbton einfärben,
entspricht
R: 181
G: 193
B: 198

wie müsste ich die Matrix füllen? -wie ich eine Graueinfärbung hin bekomme ist mir bewusst, ich bekomme nur nie das Ergebnis hin wie es mir Photoshop mit besagtem Farbton, über besagte Methode, liefert.

Wäre über einen Lösungsvorschlag sehr dankbar

grüße NON
NON ist offline   Mit Zitat antworten
Alt 26-05-2009, 12:27   #11 (permalink)
Neuer User
 
Benutzerbild von thekai
 
Registriert seit: Apr 2009
Ort: Hamburg
Beiträge: 101
Ist es möglich so einen Filter zu Tweenen?
Vlt. 2 Filter zu machen und den Unterschied zu Tweenen?
thekai 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 23:30 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele