2015-04-06 6 views
9

लोड करने के लिए फेसबुक के फ्र्रेस्को का उपयोग करके मैं फ्रैस्को के साथ अपने एंड्रॉइड ऐप में पिकासो को प्रतिस्थापित करने की कोशिश कर रहा हूं। हालांकि मुझे फ्रेस्को का उपयोग करके बिटमैप को लोड करने के बारे में अनिश्चितता है।बिटमैप

पिकासो के साथ मैं बस निम्न कार्य करता हूं।

Bitmap poster = Picasso.with(getActivity()) 
        .load(url) 
        .resize(Utils.convertDpToPixel(WIDTH,HEIGHT)) 
        .centerCrop() 
        .get(); 

मैं इस फ्रेस्को के साथ एक बिटमैप बनाने का तरीका यह पता लगाने में असमर्थ रहे हैं। कोई विचार?

+0

AFAIK के बाद से फ्रेस्को मानक बिटमैप वर्ग पर बल्कि अपने खुद के कार्यान्वयन में निर्भर नहीं करता इस पुस्तकालयों स्वैप करने के लिए कोई सीधा तरीका नहीं है। –

उत्तर

2

आप इस के लिए सीधे फ्रेस्को की छवि पाइप लाइन का प्रयोग करेंगे:

http://frescolib.org/docs/using-image-pipeline.html

हालांकि अगर आप मेरी पूछने कोई आपत्ति नहीं है - क्या प्रेरणा यहाँ है? आपको बिटमैप की आवश्यकता क्यों है?

+1

आप एसडी पर छवि को सहेजना चाहते हैं और उदाहरण के लिए स्थानीय 'SQLight' डेटाबेस में अपना रास्ता लिखना चाहते हैं। आप उपरोक्त उदाहरण में '.resize()' को कॉल करते समय बाद में उद्देश्यों के लिए मूल रिज़ॉल्यूशन छवि भी चाह सकते हैं, आपको एक आकार का चित्र देगा (सुनिश्चित नहीं है कि फ़्रेस्को एक ही काम करेगा, लेकिन यही कारण है कि मैं छवियों का आकार बदल रहा था खुद को 'पिकासो' का उपयोग करते समय)। – Droidman

+2

मुझे यकीन है कि मैं अपनी नई परियोजनाओं में फ्रैस्को को आज़मा दूंगा, लेकिन इसे इंगित करने के लिए - IMHO, डाउनलोड की गई छवि को 'बिटमैप' ऑब्जेक्ट (या कुछ अन्य प्रारूप जो आप सीधे जोड़ सकते हैं) के रूप में एक्सेस करना एक महत्वपूर्ण विशेषता है कई डेवलपर्स – Droidman

+0

देख सकते हैं मुझे Google मानचित्र API (उदाहरण के लिए) के लिए मानचित्र मार्कर बनाने के संदर्भ की आवश्यकता होगी – Kenny

17

फ्रेस्को के रूप में कहा: -:

dataSource.subscribe(new BaseBitmapDataSubscriber() { 
    @Override 
    public void onNewResultImpl(@Nullable Bitmap bitmap) { 
     // You can use the bitmap in only limited ways 
     // No need to do any cleanup. 
    } 

    @Override 
    public void onFailureImpl(DataSource dataSource) { 
     // No cleanup required here. 
    } 
    }, 
    executor); 

आप कर सकते हैं

तो पाइप लाइन के लिए आपके अनुरोध एक डीकोड छवि के लिए है एक Android बिटमैप, आप हमारी आसान से उपयोग BaseBitmapDataSubscriber का लाभ ले सकते किसी भी चर के लिए बिटमैप असाइन न करें, NNResultImpl विधि के दायरे में नहीं।

http://frescolib.org/docs/datasources-datasubscribers.html#_

मेरे कोड:

public void setDataSubscriber(Context context, Uri uri, int width, int height){ 
    DataSubscriber dataSubscriber = new BaseDataSubscriber<CloseableReference<CloseableBitmap>>() { 
     @Override 
     public void onNewResultImpl(
       DataSource<CloseableReference<CloseableBitmap>> dataSource) { 
      if (!dataSource.isFinished()) { 
       return; 
      } 
      CloseableReference<CloseableBitmap> imageReference = dataSource.getResult(); 
      if (imageReference != null) { 
       final CloseableReference<CloseableBitmap> closeableReference = imageReference.clone(); 
       try { 
        CloseableBitmap closeableBitmap = closeableReference.get(); 
        Bitmap bitmap = closeableBitmap.getUnderlyingBitmap(); 
        if(bitmap != null && !bitmap.isRecycled()) { 
         //you can use bitmap here 
        } 
       } finally { 
        imageReference.close(); 
        closeableReference.close(); 
       } 
      } 
     } 
     @Override 
     public void onFailureImpl(DataSource dataSource) { 
      Throwable throwable = dataSource.getFailureCause(); 
      // handle failure 
     } 
    }; 
    getBitmap(context, uri, width, height, dataSubscriber); 
} 

/** 
* 
* @param context 
* @param uri 
* @param width   
* @param height   
* @param dataSubscriber 
*/ 
public void getBitmap(Context context, Uri uri, int width, int height, DataSubscriber dataSubscriber){ 
    ImagePipeline imagePipeline = Fresco.getImagePipeline(); 
    ImageRequestBuilder builder = ImageRequestBuilder.newBuilderWithSource(uri); 
    if(width > 0 && height > 0){ 
     builder.setResizeOptions(new ResizeOptions(width, height)); 
    } 
    ImageRequest request = builder.build(); 
    DataSource<CloseableReference<CloseableImage>> 
      dataSource = imagePipeline.fetchDecodedImage(request, context); 
    dataSource.subscribe(dataSubscriber, UiThreadExecutorService.getInstance()); 
} 
+0

जैसा कि हम जानते हैं, आकार बदलने का विकल्प केवल जेपीजी के लिए काम करता है, जब यह पीएनजी या जीआईएफ और ऐसे में आता है सामान, फ्र्रेस्को पूरी तरह से इसका सामना नहीं कर सकता है। इसलिए मैं बस बिटमैप का आकार बदलना चाहता हूं और इसे फ्र्रेस्को द्वारा लोड करना चाहता हूं। लेकिन मुझे नहीं पता कि एक बिटमैप लोड करने के लिए फ्रैस्को का उपयोग कैसे करें। इसका कारण है कि मैं इसे लोड करने के लिए फ्रैस्को का उपयोग करना चाहता हूं, इसका उपयोग कैश का उपयोग करना है। –