Cocos2dx-获取网络图片并显示

本文转载于:http://www.cnblogs.com/zisou/p/cocos2dxWLTP.html

经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是cocos2dx - http的异步方法,相信有很多地方都会使用

到着这个需求;比如获取玩家的头像。

我就直接贴代码了,只需一个类就可以搞定;

HttpGetImg.h

#ifndef __HttpGetImg__
#define __HttpGetImg__

#include "cocos2d.h"
#include "HttpRequest.h"
#include "HttpClient.h"
USING_NS_CC_EXT;
using namespace std;
USING_NS_CC;

class HttpGetImg : public cocos2d::CCLayer
{
public:

    HttpGetImg();
    ~HttpGetImg();
    //获取网络图片,需要地址
    static void GetHttpImg(CCObject* obj, string imgurl,int number);

    void onHttpRequestRptImg(cocos2d::extension::CCHttpClient *sender, cocos2d::extension::CCHttpResponse *response);

    //按原来默认头像比例设置新图片大小
    static void setImgSize(int oldhead_w,int oldhead_h,CCSprite* sprite);

    //创建图片覆盖原有图片
    static void CreateImg(CCSprite* tagSprite,CCSprite* oldSprite,CCTexture2D* texture,int newTag);
private:

};

#endif /* HttpGetImg */

HttpGetImg.cpp

#include "HttpGetImg.h"
#include "../DataModel/GlobalInfo.h"
#include "../GameConfig.h"
#include "../Commen/PublicDoFunc.h"
HttpGetImg::HttpGetImg(void)
{

}

void HttpGetImg::GetHttpImg(CCObject* obj, string imgurl,int number)
{
    CCHttpRequest* request = new CCHttpRequest();
    // required fields
    request->setUrl(imgurl.c_str());
    request->setRequestType(CCHttpRequest::kHttpGet);
    request->setResponseCallback(obj, httpresponse_selector(HttpGetImg::onHttpRequestRptImg));
    // optional fields
    char thisnumber[10] = "";
    sprintf(thisnumber, "%d",number);
    request->setTag(thisnumber);
    CCHttpClient::getInstance()->send(request);
    request->release();
}

void HttpGetImg::onHttpRequestRptImg(CCHttpClient *sender, CCHttpResponse *response)
{

    char c_tag[20]= "";
    sprintf(c_tag, "%s",response->getHttpRequest()->getTag());
    //    CCLog("%s completed", response->getHttpRequest()->getTag());
    string str_tag = c_tag;
    if (!response)
    {
        return;
    }
    // You can get original request type from: response->request->reqType
    if (0 != strlen(response->getHttpRequest()->getTag()))
    {
        //        CCLog("%s completed", response->getHttpRequest()->getTag());
    }

    if (!response->isSucceed())
    {
        CCLog("response failed");
        CCLog("error buffer: %s", response->getErrorBuffer());
        return;
    }

    vector<char> *buffer = response->getResponseData();

    //create image
    CCImage* img = new CCImage;
    img->initWithImageData((unsigned char*)buffer->data(),buffer->size());

    //create texture
    CCTexture2D* texture = new CCTexture2D();
    bool isImg = texture->initWithImage(img);
    img->release();
       //将texture存下来
    texture

    //已下是自己封装的PublicDoFunc异步调用主线程执行换图操作的部分,可以自己去封装
    //SEL_CallFuncN pfnCallback =callfuncN_selector(View_Room::upPlayerHead);
    //CCNode* nd = CCNode::create();
    //buffer->clear();
    //nd->setTag(CCString::create(str_tag)->intValue());
    //PublicDoFunc::toDoFuncN(LAYER_ROOM, pfnCallback,nd);
}

void HttpGetImg::setImgSize(int oldhead_w,int oldhead_h,CCSprite* sprite)
{
    float s_X=oldhead_w/sprite->getContentSize().width;
    float s_Y=oldhead_h/sprite->getContentSize().height;
    sprite->setScaleX(s_X);
    sprite->setScaleY(s_Y);
}

void HttpGetImg::CreateImg(CCSprite* tagSprite,CCSprite* oldSprite,CCTexture2D* texture,int newTag)
{
    int oldw =oldSprite->getContentSize().width;
    int oldh =oldSprite->getContentSize().height;
    if(texture!=NULL)
    {
        CCSprite* sprite = CCSprite::createWithTexture(texture);
        //按原比例设置
        setImgSize(oldw,oldh,sprite);
        sprite->setPosition(oldSprite->getPosition());
        tagSprite->addChild(sprite,1,newTag);
        texture->release();
    }
}

HttpGetImg::~HttpGetImg(void)
{

}

代码非常简洁简单,先通过:

GetHttpImg(CCObject* obj, string imgurl,int number);

获取到texture,然后把texture存起来,在自己要展示的页面去调用:

CreateImg(CCSprite* tagSprite,CCSprite* oldSprite,CCTexture2D* texture,int newTag)

第一个参数是要展示的父级sprite,第二个是默认头像图片(如果没有下载成功网络图片,显示替代图片),第三个是缓存的texture;

效果图:

时间: 2024-10-06 13:23:20

Cocos2dx-获取网络图片并显示的相关文章

cocos2d-x C++ 获取网络图片缓存并展示

#ifndef __HttpGetImg__ #define __HttpGetImg__ #include "cocos2d.h" #include "HttpRequest.h" #include "HttpClient.h" USING_NS_CC_EXT; using namespace std; USING_NS_CC; class HttpGetImg : public cocos2d::CCLayer { public: HttpG

根据url路径获取图片并显示到ListView中

项目开发中我们需要从网络获取图片显示到控件中,很多开源框架如Picasso可以实现图片下载和缓存功能.这里介绍的是一种简易的网络图片获取方式并把它显示到ListView中. 本案例实现的效果如下: 项目结构: 根据部分开源代码,我修改并封装了一个网络图片加载的工具类GetImageByUrl,通过调用其中的setImage方法,传入待显示图片的ImageView控件和该图片的url路径这两个参数即可实现获取网络图片的功能. GetImageByUrl.java package com.leo.i

检测SDWebImage有没有缓存图片 IOS 获取网络图片大小

NSURL *url = [NSURL URLWithString:[model.content objectForKey:@"image"]];             //请求网络地址数据的同步方法             //因为这个方法在子线程(全局队列)中执行,所以不需要考虑死线程的问题             SDWebImageManager *manager = [SDWebImageManager sharedManager];              [manag

iOS下载图片之前获取网络图片尺寸的失败尝试

最近一直在找获取网络图片的size的方式,最后得出两个结论: 1 使用分线程下载下来,然后获得图片的size 2 使用网络请求图片的头文件,然后从头文件中找到图片大小的信息 第一种方法需要主线程分线程切换,因为在使用tableView来reloadData的时候,刷表老是出问题,先放着不管 然后我重点是想搞一下第二个方法: 在网上找到了一个博客:http://cxjwin.github.io/2013/11/05/preview_image_size/ 大神写的很不错 主要思路就是先在网上找一个

获取网络图片(Bitmap)至内存或者SD卡

/** * 获取网络图片 * 注意权限: * <uses-permission android:name="android.permission.INTERNET"/> */ private Bitmap getBitmapFromNetWork(String imageUrl){ URL url=null; Bitmap bitmap=null; InputStream inputStream=null; HttpURLConnection httpURLConnecti

cocos2dx获取网络时间(一)

今天在公司的cocos2dx项目中遇到一个需求,需要获取网络时间和系统时间对比,目的是防止用户更改系统时间进行某些非法操作 . 那么cocos2dx怎么来获取网络时间呢 ?我整理的思路如下: (1)由一个web api可以返回当前的网络时间 (2)cocos2dx通过http请求该api获取数据到本地 (3)cocos2dx解析数据得到当前的网络时间 一:首先就需要一个web接口来提供网络时间的数据,我在这里自己搭建一个WCF服务返回需要的数据. 新建WCF服务应用程序 , 项目命名为NetTi

URL转Drawable之 Android中获取网络图片的三种方法

转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用线程来实现.下面列三种获取url图片的方法: 1.直接获取:(容易:ANR,不建议) [java] view plain copy mImageView = (ImageView)this.findViewById

IOS 获取网络图片的大小 改变 图片色值 灰度什么的方法集合

第一.复制对象的基本概念 复制一个对象为副本,开辟一块新的内存来存储副本对象. 第二.如果一个对象想具备复制的功能,必须实现<NSCopying>协议和<NSMutableCopying>协议 NSObject自带的常用的对象有:NSNumber.NSString.NSArray.NSDictionary.NSMutableArray.NSMutableDictionay.NSMutableString,copy产生的对象时不可变的,mutableCopy产生的对象时可变的 第三.

Android 网络图片查看显示的实现方法

效果图如下: 界面中有三个控件,一个EditText,一个Button,一个ImageView 1.下面是具体布局文件 <EditText android:id="@+id/picturepagh" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello_world" />