मैं इस तस्वीर के समान कुछ एडब्ल्यूटी में किसी भी पाठ के चारों ओर एक रूपरेखा कैसे आकर्षित कर सकता हूं?एडब्ल्यूटी में पाठ के चारों ओर एक रूपरेखा कैसे आकर्षित करें?
उत्तर
दो उदाहरण
इस रंग से उत्पादन BufferedImage
होगा, AWT अवयव उपयोग विधि paint()
के लिए, स्विंग JComponents के लिए वहाँ paintComponet()
इसके अलावा, एक टिप्पणी में लिंक किए गए कोड से:
कुछ बेवकूफी समाधान: प्रकार एक ही शब्द दो बार लेकिन उनमें से एक काले रंग की है और अन्य सफेद, काले एक के ऊपर सफेद डाल है, तो आप कुछ इसी तरह हो सकता है। - उदाहरण के ऊपर एक फ़ॉन्ट दिखता है, और इसका उपयोग करें।
सामान्य रूप में काम करने के लिए है और मैं इसे अच्छा देखने की जरूरत है बहुत संभावना नहीं है। मुझे नहीं लगता कि एमएस या Google उनके मानचित्र में क्या करता है। –
यह सुनिश्चित नहीं है कि आप अब टेक्स्ट को कैसे चित्रित कर रहे हैं, लेकिन एक तरीका यह है कि आप इसे एक ऐसा कर सकते हैं जिसे बुफेर्ड इमेज का उपयोग ओवरले के रूप में किया जा सकता है, जिसे आप चित्रित कर रहे हैं।
- स्ट्रिंग और फ़ॉन्ट के आयामों का उपयोग करके BufferedImage बनाएं जिसे आप आकर्षित करना चाहते हैं (इसके लिए FontMetrics क्लास देखें)।
- बुफेर्ड इमेज पारदर्शिता के साथ भरें।
- अपनी स्ट्रिंग को BufferedImage पर जो भी रंग आप चाहते हैं उसे खींचें।
- बुफर्ड इमेज में प्रत्येक पिक्सेल पर इटरेट करें और देखें कि यह आपके टेक्स्ट के रंग के पिक्सेल से कितना दूर है। यदि यह एक निश्चित दूरी के भीतर है, तो उस पिक्सेल को काला बनाएं, और शायद आपके पाठ के रंग से दूर होने पर अधिक पारदर्शी हो। बेशक, यदि पिक्सेल पहले से ही आपके टेक्स्ट रंग के समान रंग है, तो इसे अनदेखा करें।
- ब्रफर्ड इमेज को जो कुछ भी आप चित्रित कर रहे हैं उसे खीचें।
संपादित
वहाँ पुस्तकालयों वहाँ कि पहले से ही ऐसा करते हैं हो सकता है, लेकिन अगर मैं खरोंच से यह कोड करने के लिए किया था, यह कैसे मैं इसे करने की कोशिश करेंगे।
अच्छा विचार, निश्चित रूप से एक कोशिश के लायक है। धन्यवाद। –
यहाँ एक hacky उदाहरण है। यह दूसरों के रूप में परिष्कृत नहीं है, लेकिन यह समझना आसान है, और यह जेएलएबल की तरह व्यवहार करता है।
public class OutlineLabel extends JLabel {
private Color outlineColor = Color.WHITE;
private boolean isPaintingOutline = false;
private boolean forceTransparent = false;
public OutlineLabel() {
super();
}
public OutlineLabel(String text) {
super(text);
}
public OutlineLabel(String text, int horizontalAlignment) {
super(text, horizontalAlignment);
}
public Color getOutlineColor() {
return outlineColor;
}
public void setOutlineColor(Color outlineColor) {
this.outlineColor = outlineColor;
this.invalidate();
}
@Override
public Color getForeground() {
if (isPaintingOutline) {
return outlineColor;
} else {
return super.getForeground();
}
}
@Override
public boolean isOpaque() {
if (forceTransparent) {
return false;
} else {
return super.isOpaque();
}
}
@Override
public void paint(Graphics g) {
String text = getText();
if (text == null || text.length() == 0) {
super.paint(g);
return;
}
// 1 2 3
// 8 9 4
// 7 6 5
if (isOpaque())
super.paint(g);
forceTransparent = true;
isPaintingOutline = true;
g.translate(-1, -1); super.paint(g); // 1
g.translate(1, 0); super.paint(g); // 2
g.translate(1, 0); super.paint(g); // 3
g.translate(0, 1); super.paint(g); // 4
g.translate(0, 1); super.paint(g); // 5
g.translate(-1, 0); super.paint(g); // 6
g.translate(-1, 0); super.paint(g); // 7
g.translate(0, -1); super.paint(g); // 8
g.translate(1, 0); // 9
isPaintingOutline = false;
super.paint(g);
forceTransparent = false;
}
public static void main(String[] args) {
JFrame w = new JFrame();
w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
OutlineLabel label = new OutlineLabel("Test", OutlineLabel.CENTER);
label.setOpaque(true);
w.setContentPane(new JPanel(new BorderLayout()));
w.add(label, BorderLayout.CENTER);
w.pack();
w.setVisible(true);
}
}
निम्नलिखित का प्रयास करें:
public void paintTextWithOutline(Graphics g) {
String text = "some text";
Color outlineColor = Color.white;
Color fillColor = Color.black;
BasicStroke outlineStroke = new BasicStroke(2.0f);
if (g instanceof Graphics2D) {
Graphics2D g2 = (Graphics2D) g;
// remember original settings
Color originalColor = g2.getColor();
Stroke originalStroke = g2.getStroke();
RenderingHints originalHints = g2.getRenderingHints();
// create a glyph vector from your text
GlyphVector glyphVector = getFont().createGlyphVector(g2.getFontRenderContext(), text);
// get the shape object
Shape textShape = glyphVector.getOutline();
// activate anti aliasing for text rendering (if you want it to look nice)
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2.setColor(outlineColor);
g2.setStroke(outlineStroke);
g2.draw(textShape); // draw outline
g2.setColor(fillColor);
g2.fill(textShape); // fill the shape
// reset to original settings after painting
g2.setColor(originalColor);
g2.setStroke(originalStroke);
g2.setRenderingHints(originalHints);
}
}
- 1. मैं एसवीजी के साथ पाठ के चारों ओर एक बॉक्स कैसे आकर्षित कर सकता हूं?
- 2. एक छवि के चारों ओर पाठ लपेटने के लिए कैसे?
- 3. WinForms बटन में पाठ के चारों ओर पैडिंग कम करें
- 4. सीएसएस - क्या पाठ में प्रत्येक चरित्र के चारों ओर एक काला रूपरेखा जोड़ना संभव है?
- 5. पाठ के चारों ओर बॉर्डर चादर है
- 6. छवियों पर रूपरेखा के साथ पाठ कैसे आकर्षित करें?
- 7. लपेटें jQuery में कुछ पाठ के चारों ओर एक अवधि
- 8. JTextPane में घटकों के चारों ओर पाठ कैसे लपेटें?
- 9. matplotlib में subplots के चारों ओर एक सीमा
- 10. एचटीएमएल फॉर्म में पाठ इनपुट के चारों ओर सीमा
- 11. ☆ केंद्र के चारों ओर स्पिन कैसे करें?
- 12. पाठ रैप केंद्रित चारों ओर छवि
- 13. मैं पाठ को कैसे आकर्षित करूं जो ऊपर और नीचे दाईं ओर ऑब्जेक्ट्स के चारों ओर बहती है?
- 14. लेटेक्स: टेक्स्ट के चारों ओर बॉक्स को कैसे आकर्षित करें जिसमें वर्बैटिम ब्लॉक होता है
- 15. कॉलम हेडर, पाद लेख और विवरण अनुभाग दोनों के चारों ओर सीमा कैसे आकर्षित करें?
- 16. पीआईएल का उपयोग कर पायथन में पाठ के चारों ओर एक हेलो बनाएं?
- 17. छवियों के चारों ओर पाठ और ब्लॉक तत्वों को लपेटना
- 18. छवि के चारों ओर सफेद स्थान
- 19. मैं एक WPF लेबल में पाठ के चारों ओर मार्जिन कैसे हटा सकता हूं?
- 20. परिवर्तनीय '' के चारों ओर ढेर
- 21. किसी अल्फा पारदर्शी छवि के चारों ओर एक रूपरेखा या स्ट्रोक ड्राइंग के लिए एल्गोरिदम
- 22. एक और बिंदु के चारों ओर एक बिंदु घुमाएं
- 23. एक वक्र के चारों ओर एक लिफाफा ड्राइंग
- 24. Google मानचित्र में एक बिंदु के चारों ओर त्रिज्या ड्रा
- 25. ब्लॉक/छवि के चारों ओर एक सूची कैसे लपेटें?
- 26. मैं एक आयताकार छवि के चारों ओर पाठ कैसे लपेट सकता हूं?
- 27. कार्य-चारों ओर एक स्टैक ओवरव्लो एक्सेप्शन
- 28. भूखंडों के समूहों के चारों ओर सीमाएं
- 29. एक सीमा में प्रत्येक सेल के चारों ओर सीमा
- 30. क्यूटी एक आयताकार के चारों ओर एक सीमा खींचता है?
यह भी देखें [यह उत्तर] (http://stackoverflow.com/a/6296381/418556) जहां (spec से परे) मैं पाठ के आकार पर एक सीमा लागू करता हूं। –
कृपया मेरे संपादन को क्षमा करें। अगर आपको नहीं लगता कि यह आपके उत्तर के लिए उपयुक्त है, तो इसे वापस रोल करें। लेकिन एक तस्वीर हजारों शब्दों को चित्रित करती है, या इस मामले में 'बिल्ली'। ;) –
* "एडब्ल्यूटी घटक के लिए .." * .. एक टाइम मशीन। उन्हें क्यों उल्लेख करें? –