में माउस पर क्लिक किया जाने वाला रंग पाने का सबसे अच्छा तरीका मेरे पास एक छवि (एमएक्स) है और मैं क्लिक किए गए पिक्सेल का संकेत प्राप्त करना चाहता हूं।एएस 3
कोई विचार?
में माउस पर क्लिक किया जाने वाला रंग पाने का सबसे अच्छा तरीका मेरे पास एक छवि (एमएक्स) है और मैं क्लिक किए गए पिक्सेल का संकेत प्राप्त करना चाहता हूं।एएस 3
कोई विचार?
यहाँ एक भी सरल कार्यान्वयन है: -
यहाँ (YMMV mxmlc का प्रयोग करके) BitmapData पेज कि मेरे लिए काम किया पर दिए गए उदाहरण के संशोधन है। आप जो कुछ करते हैं वह ड्रा() बिटमैपडेटा की विधि का उपयोग करके मंच का एक स्नैपशॉट लेता है, फिर माउस के नीचे पिक्सेल पर getPixel() का उपयोग करें। इसका लाभ यह है कि आप मंच पर खींचे गए किसी भी नमूना का नमूना दे सकते हैं, केवल एक दिए गए बिटमैप नहीं।
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;
stage.addEventListener(MouseEvent.CLICK, getColorSample);
function getColorSample(e:MouseEvent):void {
var bd:BitmapData = new BitmapData(stage.width, stage.height);
bd.draw(stage);
var b:Bitmap = new Bitmap(bd);
trace(b.bitmapData.getPixel(stage.mouseX,stage.mouseX));
}
आशा है कि यह सहायक होगा!
संपादित:
यह संपादित संस्करण एक भी BitmapData
का उपयोग करता है, और एक Bitmap
बनाने के अनावश्यक कदम निकाल देता है। यदि आप MOUSE_MOVE
पर रंग का नमूना दे रहे हैं तो स्मृति समस्याओं से बचने के लिए यह आवश्यक है।
नोट: यदि आप एक कस्टम कर्सर स्प्राइट का उपयोग कर रहे हैं तो आपको 'राज्य' के अलावा किसी ऑब्जेक्ट का उपयोग करना होगा या अन्यथा आप इसके तहत क्या है इसके बजाय कस्टम स्प्राइट का रंग नमूना लेंगे।
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;
private var _stageBitmap:BitmapData;
stage.addEventListener(MouseEvent.CLICK, getColorSample);
function getColorSample(e:MouseEvent):void
{
if (_stageBitmap == null) {
_stageBitmap = new BitmapData(stage.width, stage.height);
}
_stageBitmap.draw(stage);
var rgb:uint = _stageBitmap.getPixel(stage.mouseX,stage.mouseY);
var red:int = (rgb >> 16 & 0xff);
var green:int = (rgb >> 8 & 0xff);
var blue:int = (rgb & 0xff);
trace(red + "," + green + "," + blue);
}
BitmapData LiveDoc Page पर कुछ मिनट आपको ले जाएंगे जहां आपको जाना होगा। एक बार जब आप अपनी छवि को बिटमैप वैरिएबल में लोड कर लेते हैं, तो आप इसकी बिटमैपडेटा संपत्ति तक पहुंच सकते हैं। Mouse Click Event छवि में श्रोता जोड़ें और फिर BitmapData::getPixel का उपयोग करें। GetPixel के लिए उदाहरण दिखाता है कि एक rgb हेक्स कोड में uint प्रतिक्रिया को कैसे परिवर्तित करें।
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
public class BitmapDataExample extends Sprite {
private var url:String = "santa-drunk1.jpg";
private var size:uint = 200;
private var image:Bitmap;
public function BitmapDataExample() {
configureAssets();
}
private function configureAssets():void {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
var request:URLRequest = new URLRequest(url);
loader.load(request);
addChild(loader);
}
private function completeHandler(event:Event):void {
var loader:Loader = Loader(event.target.loader);
this.image = Bitmap(loader.content);
this.addEventListener(MouseEvent.CLICK, this.clickListener);
}
private function clickListener(event:MouseEvent):void {
var pixelValue:uint = this.image.bitmapData.getPixel(event.localX, event.localY)
trace(pixelValue.toString(16));
}
}
}
यह फ्लेक्स या mx के लिए विशिष्ट नहीं है: छवि, और आप किसी बिटमैप drawable वस्तु से एक पिक्सेल रंग मूल्य (बशर्ते आपके पास अनुमति है) हड़पने के लिए अनुमति देता है:
private const bitmapData:BitmapData = new BitmapData(1, 1);
private const matrix:Matrix = new Matrix();
private const clipRect:Rectangle = new Rectangle(0, 0, 1, 1);
public function getColor(drawable:IBitmapDrawable, x:Number, y:Number):uint
{
matrix.setTo(1, 0, 0, 1, -x, -y)
bitmapData.draw(drawable, matrix, null, null, clipRect);
return bitmapData.getPixel(0, 0);
}
आप आसानी से हड़पने सकता है मंच या आपके एमएक्स से एक पिक्सेल: छवि उदाहरण। यह पूरे चरण (या खींचने योग्य वस्तु) को चित्रित करने से कहीं अधिक कुशल है, और तत्काल दृश्य प्रतिक्रिया के लिए MouseEvent.MOUSE_MOVE तक पहुंचने के लिए पर्याप्त तेज़ होना चाहिए।
आईएमओ इस तथ्य के कारण निश्चित रूप से बेहतर उत्तर है कि यह पूरे चरण को आकर्षित नहीं करता है और अधिक सटीक प्रश्न का उत्तर देता है। – Allar
मैं तुम्हें मारने जा रहा हूं !!!!!!!!!!! क्या कोई देख सकता है .... ;-) युक्ति: इसे उपयोग करने से पहले हमेशा स्टैक ओवरफ्लो कोड को दोबारा जांचें :-) –
मैं कुछ सरल सीमाओं को अच्छी माप के लिए जांच करूँगा, यह सुनिश्चित करने के लिए कि आप अपने एक्स को पकड़ लें और वाई मंच क्षेत्र के बाहर हैं। –
आपको केवल एक पिक्सेल मान को पकड़ने के लिए पूरे चरण को आकर्षित करने की आवश्यकता नहीं है। बिटमैपडाटा 1x1 बनाएं और उस मैट्रिक्स को पास करें और उस ड्रॉ कॉल पर क्लिपआरक्ट करें। – darscan