यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
थंबनेल (लघुचित्र) कैसे बनाएँ
उद्देश्य। केवल ड्राइंग में स्केल करने के बजाय, किसी बड़ी छवि को एक स्थायी लघुचित्र में घटाना (वास्तव में
घटाए गए पिक्सेल वाली एक नई Image)। जब आप कई लघुचित्र प्रदर्शित करते हैं तो यह टेक्सचर मेमोरी
और GPU बैंडविड्थ की बचत करता है।
उपयोग की गई APIs
Image resize(int newWidth, int newHeight, ResizeMode mode, ResizeQuality quality) throws ImageException— मुख्य प्रवेश बिंदु। एक नईImageलौटाता है; मूल छवि संशोधित नहीं होती।Image resize(int newWidth, int newHeight, ResizeMode mode)—ResizeQuality.SMOOTHका उपयोग करने वाला ओवरलोड।Image resize(int newWidth, int newHeight)—ResizeMode.STRETCH+ResizeQuality.SMOOTHका उपयोग करने वाला ओवरलोड।Image resizeWidth(int newWidth[, ResizeQuality])/Image resizeHeight(int newHeight[, ResizeQuality])— किसी लक्ष्य चौड़ाई या ऊँचाई से अनुपात बनाए रखते हुए आकार बदलते हैं (थंबनेल के लिए आदर्श)।
Enums (UIConstants में सत्यापित)
ResizeMode { STRETCH, FIT, FILL }
STRETCH— ठीकw×hको बाध्य करता है (विकृत कर सकता है)।FIT— अनुपात बनाए रखता है और पूरी छवि कोw×hके भीतर फिट करता है (letter-box; परिणाम लक्ष्य से छोटा हो सकता है)।FILL— अनुपात बनाए रखता है औरw×hको भरता है, केंद्र से अतिरिक्त को काटते हुए।
ResizeQuality { FAST, SMOOTH, HARDWARE }
FAST— तेज़ नमूनाकरण (nearest); रीयल-टाइम कैश के लिए उपयोग करें।SMOOTH— उच्च गुणवत्ता वाला पुनः नमूनाकरण; सहेजे/प्रदर्शित होने वाले थंबनेल के लिए उपयोग करें।HARDWARE— स्रोत पिक्सेल बनाए रखता है और ड्राइंग के समय स्केल को GPU को सौंप देता है (pixmap मेमोरी कम नहीं करता)।
पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
package com.exemplo;
import java.io.IOException;
import dev.crossfly.ui.*; // Window, ImageView, UIConstants.ImageSize
import dev.crossfly.ui.layout.*; // VerticalLayout, LAY_AUTO
import dev.crossfly.ui.image.*; // Image, ImageException
import dev.crossfly.ui.UIConstants.ResizeMode;
import dev.crossfly.ui.UIConstants.ResizeQuality;
/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
try {
Image original = new Image("/sdcard/foto.jpg");
// 128x128 थंबनेल जो भरता है और अतिरिक्त को काटता है, अच्छी गुणवत्ता के साथ:
Image thumb = original.resize(128, 128, ResizeMode.FILL, ResizeQuality.SMOOTH);
// चौड़ाई से अनुपात बनाए रखने वाला विकल्प (बिना काटे):
Image thumbW = original.resizeWidth(128, ResizeQuality.SMOOTH);
add(new ImageView(thumb, UIConstants.ImageSize.ORIGINAL), LAY_AUTO);
add(new ImageView(thumbW, UIConstants.ImageSize.ORIGINAL), LAY_AUTO);
} catch (ImageException | IOException e) {
// फ़ाइल नहीं मिली या resize में विफलता (उदा.: "Out of memory")
}
}
}
नीचे दिया गया अंश केवल मुख्य भाग दिखाता है। चलाने के लिए, इसे ऊपर दिए गए
MainWindowढांचे में रखें।
न्यूनतम अंश
// स्रोत में सत्यापित: Image.java resize(...) पंक्ति 870; UIConstants में enums (795, 806)
import dev.crossfly.ui.image.*; // Image, ImageException
import dev.crossfly.ui.UIConstants.ResizeMode;
import dev.crossfly.ui.UIConstants.ResizeQuality;
Image original = new Image("/sdcard/foto.jpg");
// 128x128 थंबनेल जो भरता है और अतिरिक्त को काटता है, अच्छी गुणवत्ता के साथ:
Image thumb = original.resize(128, 128, ResizeMode.FILL, ResizeQuality.SMOOTH);
// चौड़ाई से अनुपात बनाए रखने वाला विकल्प (बिना काटे):
Image thumbW = original.resizeWidth(128, ResizeQuality.SMOOTH);
कार्यान्वयन नोट (स्रोत):
ResizeMode.FIT/FILLके साथ,resizeपहले समान रूप से स्केल करता है औरFILLके मामले में,getArea(...)के माध्यम से केंद्र से काटता है।STRETCHके साथ यह सीधे ठीक स्केलिंग को कॉल करता है।resizeImageExceptionफेंकता है (उदा.: बहुत बड़ी छवियों में “Out of memory”) और यदिnewWidth/newHeight≤ 0 हो तोIllegalArgumentException।
resize(...)(नए पिक्सेल बनाता है) कोrenderScaleX/renderScaleYऔरsetRenderScale(...)के साथ भ्रमित न करें, जो केवल pixmap बदले बिना GPU के माध्यम से ड्राइंग में स्केल करते हैं।
और गहराई से जानें
- छवियाँ — विनाशकारी resize और render-scale के बीच अंतर।
- संबंधित रेसिपी: salvar-imagem.md — थंबनेल बनाने के बाद उसे डिस्क पर सहेजें।