एक OpaqueClickableImage
कि केवल मारा-परीक्षण करने के लिए छवि के लिए पर्याप्त रूप से अपारदर्शी क्षेत्रों में प्रतिक्रिया करता है बनाने के लिए this answer में तकनीक आप Image
से निकाले जाते हैं कर सकते हैं का उपयोग करना: इस वर्ग को जोड़ने के बाद
public class OpaqueClickableImage : Image
{
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
var source = (BitmapSource)Source;
// Get the pixel of the source that was hit
var x = (int)(hitTestParameters.HitPoint.X/ActualWidth * source.PixelWidth);
var y = (int)(hitTestParameters.HitPoint.Y/ActualHeight * source.PixelHeight);
// Copy the single pixel into a new byte array representing RGBA
var pixel = new byte[4];
source.CopyPixels(new Int32Rect(x, y, 1, 1), pixel, 4, 0);
// Check the alpha (transparency) of the pixel
// - threshold can be adjusted from 0 to 255
if (pixel[3] < 10)
return null;
return new PointHitTestResult(this, hitTestParameters.HitPoint);
}
}
, बस इसका इस्तेमाल
<utils:OpaqueClickableImage Name="image" Source="http://entropymine.com/jason/testbed/pngtrans/rgb8_t_bk.png" Stretch="None"/>
स्रोत
2011-01-26 04:34:16
धन्यवाद: एक नियमित रूप से छवि की तरह! यह पूरी तरह से काम करता है। मुझे उस दूसरी पोस्ट को याद किया होगा। – Bradley
Awsome! आपका बहुत बहुत धन्यवाद! :) – CainKellye
मैंने वास्तव में यह असफल पाया है क्योंकि 'x' या' y' 'स्रोत' के 'पिक्सेलविड्थ' या 'पिक्सेलहेइट' के बाहर होगा। या तो गणना को गोल कर सकते हैं, या कह सकते हैं, यदि 'x> = पिक्सेल विड्थ: x = पिक्सेल विड्थ' –