Hi,
Ich habe ein kleines Problem mit der getPixel32() Methode.
Mein Programm besteht aus zwei übereinander liegenden Movieclips.
In den untersten Movieclip ist ein Bild eingezeichnet und auf den obersten wird zur Laufzeit ein Bild eingezeichnet (praktisch eine Zeichenfläche).
Aus beiden Movieclips lasse ich mir ein Bitmap machen und will mir in einem Array die Farbwerte der Pixel eintragen lassen um dann zu vergleichen ob die beiden Bilder sich überdecken.
Mit getPixels() habe ich es schon probiert, aber festgestellt, das die Funktionwohl etwas fehlerhaft arbeitet (zumindest hatten andere wohl das gleiche Problem mit getPixels())
Da ich auch den Alpha- Kanal mit auslesen will, versuch ich in einer Schleife die Werte mit getPixel32() auszulesen und dann in einem Array zu speichern.
Problem: Irgendwie liest mein Programm ungenau aus. Beispiel: siehe Bildanhang. Das rote ist der eingezeichnete Bereich und meistens gibt er mir entweder zu wenige Pixel als markiert aus oder manchmal sagt er auch, das gar nichts markiert ist.
Diesen Fehler habe ich jedoch nciht nur mit dem Zeichenflächen Movieclip (mc2), sondern auch mit dem unterstem Movieclip (grün eingzeichnet), in den vor Programmstart schon etwas eingezeichnet wurde.
Beide Movieclips haben in meinem Beispiel jetzt eine Größe von 30*30 und dieser komplette Bereich wird in meinen Schleifen auch ausgelesen.
Weiß einer woran es liegen könnte, das er den roten Bereich aus dem Bild im Anhang nicht einliest? (wenn der Bereich größer ist, liest er es wie gesagt ein, aber auch zu ungenau)
Quellcode:
Ich habe ein kleines Problem mit der getPixel32() Methode.
Mein Programm besteht aus zwei übereinander liegenden Movieclips.
In den untersten Movieclip ist ein Bild eingezeichnet und auf den obersten wird zur Laufzeit ein Bild eingezeichnet (praktisch eine Zeichenfläche).
Aus beiden Movieclips lasse ich mir ein Bitmap machen und will mir in einem Array die Farbwerte der Pixel eintragen lassen um dann zu vergleichen ob die beiden Bilder sich überdecken.
Mit getPixels() habe ich es schon probiert, aber festgestellt, das die Funktionwohl etwas fehlerhaft arbeitet (zumindest hatten andere wohl das gleiche Problem mit getPixels())
Da ich auch den Alpha- Kanal mit auslesen will, versuch ich in einer Schleife die Werte mit getPixel32() auszulesen und dann in einem Array zu speichern.
Problem: Irgendwie liest mein Programm ungenau aus. Beispiel: siehe Bildanhang. Das rote ist der eingezeichnete Bereich und meistens gibt er mir entweder zu wenige Pixel als markiert aus oder manchmal sagt er auch, das gar nichts markiert ist.
Diesen Fehler habe ich jedoch nciht nur mit dem Zeichenflächen Movieclip (mc2), sondern auch mit dem unterstem Movieclip (grün eingzeichnet), in den vor Programmstart schon etwas eingezeichnet wurde.
Beide Movieclips haben in meinem Beispiel jetzt eine Größe von 30*30 und dieser komplette Bereich wird in meinen Schleifen auch ausgelesen.
Weiß einer woran es liegen könnte, das er den roten Bereich aus dem Bild im Anhang nicht einliest? (wenn der Bereich größer ist, liest er es wie gesagt ein, aber auch zu ungenau)
Quellcode:
PHP:
button1.onRelease=function(){
trace("Knopf gedrückt");
mc2.cacheAsBitmap=true;
h1=mc1._height;
h2=mc2._height;
w1=mc1._width;
w2=mc2._width;
var matrix2=new Matrix();
var bmp1=new BitmapData(w1,h1);
var bmp2=new BitmapData(w2,h2); //bmp für zeichenfläche
bmp1.draw(mc1); //bmp für untersten Movieclip
bmp2.draw(mc2); //bmp für Zeichenfläche
var bmp1height=bmp1.height;
var bmp1width=bmp1.width;
var loesung :Array = new Array();
var i:Number;
var j:Number;
for (i = 0; i < bmp1.width; i++) {
loesung[i] = new Array();
for (j = 0; j < bmp1.height; j++) {
loesung[i][j] = bmp1.getPixel32(i, j);
}
}
var eingezeichnet:Array=new Array();
var k:Number;
var m:Number;
for(k=0;k<bmp2.width; k++){
eingezeichnet[k]=new Array();
for(m=0;m<bmp2.height;m++){
eingezeichnet[k][m]=bmp2.getPixel32(k,m);
var testvariable=eingezeichnet[k][m].toString();
var testvariable2=loesung[k][m].toString();
trace("Testvariable "+testvariable);
trace("array 2"+eingezeichnet[k][m]);
if(testvariable != "-1" && testvariable2 != "-1"){
trace("beide ungleich -1"); //beide nicht unsichtbar
insgesamt=insgesamt+1;
richtig=richtig+1
}
else{
if(testvariable != "-1"){
insgesamt=insgesamt+1;
}
}
}
}
trace("richtig: "+richtig);
trace("insgesamt: "+insgesamt);
}
Anhänge
Zuletzt bearbeitet: