यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
फ़ाइल या नेटवर्क से छवि कैसे लोड करें
उद्देश्य। किसी स्थानीय पथ से या नेटवर्क से डाउनलोड किए गए बाइट्स से एक छवि फ़ाइल (PNG, JPEG या GIF)
लोड करें और उसे ImageView के साथ स्क्रीन पर प्रदर्शित करें। फ़ोटो, आइकन और चित्र दिखाने का
यह सबसे आम तरीका है।
उपयोग की गई APIs
new Image(String path) throws ImageException, IOException— किसी फ़ाइल पथ से छवि लोड करता है। यदि फ़ाइल न मिले तोImageExceptionफेंकता है (जब पढ़ने के बादwidth == 0)।new Image(byte[] bytes) throws ImageException— पहले से मेमोरी में मौजूद बाइट्स की एक सरणी से छवि को डिकोड करता है (PNG/JPEG/GIF)। नेटवर्क से डाउनलोड किए गए डेटा के लिए इस कंस्ट्रक्टर का उपयोग करें।new ImageView(Image image, ImageSize imageSize)— वह विजेट बनाता है जो छवि खींचता है।ImageSize.RATIOके साथ छवि को अनुपात बनाए रखते हुए समान रूप से स्केल किया जाता है (letter-boxing), बिना काटे।ImageView.imageSize(ImageSize)/.alignX(Position)/.alignY(Position)— आयाम मोड और संरेखण को समायोजित करने के लिए फ़्लुएंट सेटर (डिफ़ॉल्टPosition.CENTER)।
Javadoc×कोड विचलन:
new Image(String)का Javadoc कहता है “@throws ImageException When the file was not found”, लेकिन वास्तविक हस्ताक्षरIOExceptionभी घोषित करता है। दोनों को संभालें।
पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
package com.exemplo;
import java.io.IOException;
import dev.crossfly.Main; // runOnPaintThreadAndWait
import dev.crossfly.ui.*; // Window, Component, ImageView, UIConstants.ImageSize
import dev.crossfly.ui.layout.*; // VerticalLayout, LAY_FILL
import dev.crossfly.ui.image.*; // Image, ImageException
/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
private ImageView imageView;
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// 1) एक स्थानीय फ़ाइल से
try {
Image img = new Image("/sdcard/foto.jpg"); // ImageException / IOException फेंक सकता है
ImageView iv = new ImageView(img, UIConstants.ImageSize.RATIO);
add(LAY_FILL, iv);
} catch (ImageException | IOException e) {
// फ़ाइल नहीं मिली या भ्रष्ट है
}
// 2) नेटवर्क से: paint thread के बाहर डाउनलोड और डिकोड करें, फिर विजेट अपडेट करें
imageView = new ImageView(null, UIConstants.ImageSize.RATIO);
add(LAY_FILL, imageView);
new Thread(() -> {
try {
byte[] data = baixarBytes("https://exemplo.com/foto.png"); // आपका HTTP client
Image img = new Image(data); // paint thread के बाहर डिकोड करता है
Main.runOnPaintThreadAndWait(() -> imageView.image(img));
} catch (Exception e) {
// नेटवर्क/डिकोडिंग त्रुटि को संभालें
}
}).start();
}
/** Stub: अपने HTTP client से बदलें। */
private byte[] baixarBytes(String url) throws IOException
{
return new byte[0];
}
}
नीचे दिया गया अंश केवल मुख्य भाग दिखाता है। चलाने के लिए, इसे ऊपर दिए गए
MainWindowढांचे में रखें।
न्यूनतम अंश
// स्रोत में सत्यापित: Image.java (पंक्तियाँ 403, 432) और ImageView.java (पंक्ति 72)
import dev.crossfly.ui.image.*; // Image, ImageException
import dev.crossfly.ui.*; // ImageView, UIConstants.ImageSize
// 1) एक स्थानीय फ़ाइल से
try {
Image img = new Image("/sdcard/foto.jpg"); // ImageException / IOException फेंक सकता है
ImageView iv = new ImageView(img, UIConstants.ImageSize.RATIO);
add(iv, /* आपके container की स्थिति/लेआउट */);
} catch (ImageException | java.io.IOException e) {
// फ़ाइल नहीं मिली या भ्रष्ट है
}
नेटवर्क से (बाइट्स को paint thread के बाहर डाउनलोड करें)
new Image(...) पिक्सेल को डिकोड करता है और यह एक भारी ऑपरेशन है। paint thread पर कभी डाउनलोड या डिकोड
न करें। बाइट्स को किसी वर्कर Thread में डाउनलोड करें, वहीं Image बनाएँ और उसके बाद ही विजेट को अपडेट करें।
// स्रोत में सत्यापित: new Image(byte[]) — Image.java पंक्ति 432
new Thread(() -> {
try {
byte[] data = baixarBytes("https://exemplo.com/foto.png"); // आपका HTTP client
Image img = new Image(data); // paint thread के बाहर डिकोड करता है
// अब paint thread पर UI अपडेट शेड्यूल करें
Main.runOnPaintThreadAndWait(() -> imageView.image(img));
} catch (Exception e) {
// नेटवर्क/डिकोडिंग त्रुटि को संभालें
}
}).start();
और गहराई से जानें
- पृष्ठभूमि में कार्य — डाउनलोड और डिकोड के लिए paint thread से कैसे बाहर निकलें।
- ImageView विजेट और छवियाँ —
ImageSizeके मोड और संरेखण। - संबंधित रेसिपी: imagem-de-fundo.md।