मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

थंबनेल (लघुचित्र) कैसे बनाएँ

उद्देश्य। केवल ड्राइंग में स्केल करने के बजाय, किसी बड़ी छवि को एक स्थायी लघुचित्र में घटाना (वास्तव में घटाए गए पिक्सेल वाली एक नई 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 के साथ यह सीधे ठीक स्केलिंग को कॉल करता है। resize ImageException फेंकता है (उदा.: बहुत बड़ी छवियों में “Out of memory”) और यदि newWidth/newHeight ≤ 0 हो तो IllegalArgumentException।

resize(...) (नए पिक्सेल बनाता है) को renderScaleX/renderScaleY और setRenderScale(...) के साथ भ्रमित न करें, जो केवल pixmap बदले बिना GPU के माध्यम से ड्राइंग में स्केल करते हैं।

और गहराई से जानें

  • छवियाँ — विनाशकारी resize और render-scale के बीच अंतर।
  • संबंधित रेसिपी: salvar-imagem.md — थंबनेल बनाने के बाद उसे डिस्क पर सहेजें।
क्या यह पृष्ठ उपयोगी था?