#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 */

#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)

{

}

cocos2d-x C++ 获取网络图片缓存并展示的更多相关文章

  1. 【cocos2d-x 手游研发小技巧(5)获取网络图片缓存并展示】

    今天是年前最后一天上班了,最后一天上班,祝大家马上有各种东西,最后一天也给写一点干货,就是获取网络图片: 经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是cocos2dx - ...

  2. 分享一个安卓中异步获取网络图片并自适应大小的第三方程序(来自github)

    安卓中获取网络图片,生成缓存 用安卓手机,因为手机流量的限制,所以我们在做应用时,要尽量为用户考虑,尽量少耗点用户的流量,而在应用中网络图片的显示无疑是消耗流量最大的,所以我们可以采取压缩图片或者将图 ...

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

    直接上代码了 头文件 // 图片处理 0 半灰色  1 灰度   2 深棕色    3 反色 +(UIImage*)imageWithImage:(UIImage*)image grayLevelTy ...

  4. [转]Android 如何根据网络地址获取网络图片方法

    http://blog.csdn.net/xiazdong/article/details/7724103 目录(?)[-] h2pre namecode classhtml stylefont-we ...

  5. 请求网络图片缓存到本地 ,还有一些现成的图片加载框架的使用 Ace网络篇(一)

    现在去买年货~~~~~~ 占坑, 现在来填坑 填完睡觉,感谢这俩月的把自己往死里逼得奋斗从JAVA什么都不懂到现在,做这些也是给在自学路上的新人(我也是菜鸟)一点点我力所能及的帮助,等我水平更高了还会 ...

  6. iOS网络图片缓存详解

    在开发移动应用的时候比如Android,IOS,因为手机流量.网速.内存等这些因素,当我们的移动应用是针对互联网,并要频繁访问网络的话,对网络优化这块就显得尤为重要了. 比如某个应用要经常显示网络图片 ...

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

    转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Applicatio ...

  8. iOS 获取网络图片的大小

    一直都在找关于获取网络图片的大小的方法, 今天找到了一个能解决的办法 ,如下 1, 导入框架 #import <ImageIO/ImageIO.h> 2. 使用此方法得到image的siz ...

  9. PHP获取网络图片并保存在本地目录

    PHP获取网络图片并保存在本地目录思路: 代码如下: function file_exists_S3($url) { $state = @file_get_contents($url,0,null,0 ...

随机推荐

  1. [原创]基于Zynq Linux环境搭建(一)

    安装VMWare版本12 Ubuntu版本 12.04.5 64bit 系统安装完成后,登陆系统,在sotfware中心安装konsole.gvim.software source等基本软件 在sof ...

  2. JS对象与原型链

    每个函数都存在一个prototype的属性,然后这个属性值为一个对象,我们称之为原型对象 每个对象都存在着一个隐藏的属性"__proto__" 这个属性引用了创建这个对象的函数的p ...

  3. JS this用法详解

        随着对js的深入学习和使用,你会发现它里面包含了很多令人困惑的机制,比如对象.闭包.原型链继承等等 1.this是啥? 简言之,this是JavaScript语言中定义的众多关键字之一,它的特 ...

  4. VS开发入门二: VS 里提示图标的含义

    VS里面的 我们写代码的过程中,有智能提示可以看到前面的小图标,初学者可以判断是什么意思哟. 1.以下是常用的几个图标 2.其他参考图标:  事件  结构  接口  枚举项  模块  映射项  内部 ...

  5. linux安装杀毒软件

    https://www.cnblogs.com/bingo1024/p/9018212.html

  6. Autofac之自动装配

    从容器中的可用服务中选择一个构造函数来创造对象,这个过程叫做自动装配.这个过程是通过反射实现的 默认 思考这么一个问题,如果注册类型中存在多个构造函数,那么Autofac会选择哪一个来创建类型的实例 ...

  7. MFC 修改标题

    1. Overwrite CMainFrame::PreCreateWindow. Clear the style FWS_ADDTOTITLE cs.style &= ~(LONG)FWS_ ...

  8. Typora极简教程

    Typora极简教程 ” Markdown 是一种轻量级标记语言,创始人是约翰·格鲁伯(John Gruber).它允许人们 “使用易读易写的纯文本格式编写文档,然后转换成有效的 HTML 文档.” ...

  9. oracle解决导入高版本dmp报错问题:IMP-00058: ORACLE error 12547 encountered

    低版本oracle导入高版本的dmp时,导过的人都应该清楚,直接导入是会报错的,报错信息如下,其实解决这个问题很简单, 只要修改一下dmp内的版本号就可以了. 修改版本不能随便使用文本工具打开,否知会 ...

  10. Python004-数据处理示例:以某个数据(字段)为基准从数据中获取不同的字段行数

    数据源样式如下所示: 需求: 读取文本,以第一列为基准参考系,每个基准仅输出满足需要条数的数据:不满足,全部输出. 比如,基准为 6236683970000018780,输出条数要求为 5.若文本中含 ...