मैं पुष्टि कर सकता हूं कि आपकी छवियां ओरेकल जावा 1.8 पर स्केलिंग करती हैं। मुझे जावा 1.7 या 1.8 पर काम करने के लिए NSImage
हैक नहीं मिल सकता है।मैं मैक से लगता है कि जावा 6 के साथ यह केवल काम करता है ...
जब तक किसी और एक बेहतर समाधान है, मैं क्या निम्नलिखित है:
माउस के दो सेट बनाएँ। यदि आपके पास 48pixel
चौड़ाई आइकन है 48px
@ सामान्य DPI
और 96px
पर 2x DPI
के साथ। सेब नामकरण मानकों के अनुरूप के रूप में 2xDPI
छवि का नाम बदलें।
सबक्लास ImageIcon
और इसे RetinaIcon
या जो कुछ भी कहें। आप एक रेटिना प्रदर्शन के लिए परीक्षण कर सकते हैं इस प्रकार है:
public static boolean isRetina() {
boolean isRetina = false;
GraphicsDevice graphicsDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
try {
Field field = graphicsDevice.getClass().getDeclaredField("scale");
if (field != null) {
field.setAccessible(true);
Object scale = field.get(graphicsDevice);
if(scale instanceof Integer && ((Integer) scale).intValue() == 2) {
isRetina = true;
}
}
}
catch (Exception e) {
e.printStackTrace();
}
return isRetina;
}
इस प्रकार सुनिश्चित करें @Override
के लिए चौड़ाई और नए ImageIcon
वर्ग की ऊंचाई करें:
@Override
public int getIconWidth()
{
if(isRetina())
{
return super.getIconWidth()/2;
}
return super.getIconWidth();
}
@Override
public int getIconHeight()
{
if(isRetina())
{
return super.getIconHeight()/2;
}
return super.getIconHeight();
}
एक बार जब आप रेटिना स्क्रीन के लिए एक परीक्षण है
@Override
public synchronized void paintIcon(Component c, Graphics g, int x, int y)
{
ImageObserver observer = getImageObserver();
if (observer == null)
{
observer = c;
}
Image image = getImage();
int width = image.getWidth(observer);
int height = image.getHeight(observer);
final Graphics2D g2d = (Graphics2D)g.create(x, y, width, height);
if(isRetina())
{
g2d.scale(0.5, 0.5);
}
else
{
}
g2d.drawImage(image, 0, 0, observer);
g2d.scale(1, 1);
g2d.dispose();
}
मैं: और अपने कस्टम चौड़ाई/ऊंचाई तरीके इस प्रकार आप painIcon
विधि अनुकूलित कर सकते हैं अधिरोहित यह नहीं पता कि यह एकाधिक स्क्रीन के साथ कैसे काम करेगा- क्या कोई और है जो उसमें मदद कर सकता है ???
आशा है कि यह कोड वैसे भी मदद करेगा!
जेसन बैराक्लो। RetinaIcon is on the left. ImageIcon is on the right
कृपया एक प्रश्न [एसएससीई] (http://sscce.org/) शामिल करने के लिए अपना प्रश्न संपादित करें जो आपके चिंता का क्षेत्र दिखाता है; एक नया मैकबुक प्रो रेटिना डिस्प्ले स्वामी एक [स्क्रीनशॉट] पोस्ट कर सकता है (http://meta.stackexchange.com/questions/99734/how-do-i-create-a-creenshot-to-illustrate-a-post)। – trashgod
बीटीडब्ल्यू, आपका 24x24 आइकन केवल 48x48 आइकन बनने की जरूरत है। रेटिना प्रत्येक आयाम में संकल्प को दोगुना करता है, जो प्रत्येक पिक्सेल को चार पिक्सेल में बदल देता है। – MiguelMunoz