getPixel32() Problem

nim1337

Grünschnabel
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:

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

  • beispiel.JPG
    beispiel.JPG
    2,3 KB · Aufrufe: 63
Zuletzt bearbeitet:
Hi,

var testvariable2=mainArr[k][m].toString();
Wo kommt denn das Array "mainArr" her? Soll das eine Kopie des Arrays "loesung" darstellen?

Wenn Dein Vergleich nicht aufgeht, könnte das an den unterschiedlichen Maßen beider Bitmaps liegen.

Gruß
.
 
Hi,

Wo kommt denn das Array "mainArr" her? Soll das eine Kopie des Arrays "loesung" darstellen?

Wenn Dein Vergleich nicht aufgeht, könnte das an den unterschiedlichen Maßen beider Bitmaps liegen.

Gruß
.

Ne, sorry, das heißt normal auch loesung, das Array.
Hatte es fürs Forum zur übersichtlichkeit alles umbenannt und es wohl an der Stelle vergessen.
Die Bitmaps haben exakt die gleichen Maße/Position.
Mein Problem fängt schon damit an, das er mir die Pixel nicht richtig einlesen will.
 
Hi,

ich kann an Deinem Code keinen eklatanten Fehler entdecken - dass die Vorgehensweise generell funktioniert, kannst Du dem Beispiel im Anhang entnehmen (die Unterschiede der Clips "clip1" und "clip2" werden ermittelt und im Clip "res" eingezeichnet).

Bitte poste Deine .fla, dann kann ich mich ggf. auf Fehlersuche machen.

Gruß
.
 

Anhänge

  • comparePixels.fla
    55 KB · Aufrufe: 35
Danke für das Beispiel, werd es mir mal angucken. Vielleicht finde ich den Fehler dadurch.

Im Anhang meine .fla
 

Anhänge

  • checkPixel.fla
    65,5 KB · Aufrufe: 32
Zurück