lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 8319|回复: 4
打印 上一主题 下一主题

1.9.2 LBitmapData. setPixel BUG

[复制链接]

2

主题

0

好友

30

积分

士兵

Rank: 1

跳转到指定楼层
楼主
发表于 2014-9-22 16:04:18 |只看该作者 |倒序浏览
测试代码:
function main() {
    var bitmapData = new LBitmapData('#123456', 1, 1, 100, 100);
    var bitmap = new LBitmap(bitmapData);
    addChild(bitmap);
    var arr;
    bitmap.bitmapData.lock();
    for (var i = 0; i < bitmap.bitmapData.width; i++) {
        for (var j = 0; j < bitmap.bitmapData.height; j++) {
            arr = bitmap.bitmapData.getPixel(i, j);
            arr[0] = 0;
            arr[1] = 0;
            arr[2] = 0;
            bitmap.bitmapData.setPixel(i, j, arr);
        }
    }
    bitmap.bitmapData.unlock();
}

问题:
setPixel : function (x, y, data) {
                        var s = this;
                x = x >> 0;
                y = y >> 0;
                        if (!s._locked) {
                                s._ready();
                        }
                        var d = s._data, i = s._canvas.width * 4 * (s.y + y) + (s.x + x) * 4;
                        if (typeof data == "object") {
                                d.data[i + 0] = data[0];
                                d.data[i + 1] = data[1];
                                d.data[i + 2] = data[2];
                                d.data[i + 3] = data[3];
                        } else {
                                if (typeof data == "string") {
                                        data = parseInt(data.replace("#", "0x"));
                                }
                                d.data[i + 0] = data >> 16 & 0xFF;
                                d.data[i + 1] = data >> 8 & 0xFF;
                                d.data[i + 2] = data & 0xFF;
                                d.data[i + 3] = 255;
                        }
                        if (!s._locked) {
                                s._update();
                        }
                },

._canvas去掉就好使了
回复

使用道具 举报

37

主题

8

好友

9311

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

沙发
发表于 2014-9-22 16:12:06 |只看该作者
利用颜色新建LBitmapData的话,
应该是var bitmapData = new LBitmapData('#123456', 0, 0, 100, 100);
你试一下看看
不回答与技术和引擎不相关的问题
回复

使用道具 举报

2

主题

0

好友

30

积分

士兵

Rank: 1

板凳
发表于 2014-9-22 17:16:44 |只看该作者
本帖最后由 孤枫独行 于 2014-9-22 17:29 编辑
lufy 发表于 2014-9-22 16:12
利用颜色新建LBitmapData的话,
应该是var bitmapData = new LBitmapData('#123456', 0, 0, 100, 100);
你 ...


我的需求是这样的,我需要截取一张大图中的一块小图,然后对这块小图的LBitmapData变化颜色
代码:

var loadingLayer, imgList, mainLayer;
var imgData = new Array(
    {name:"btn_down",path:"../resource/WoodenAtlas.png"}
);

function main() {
    mainLayer = new LSprite();
    addChild(mainLayer);
    openTimer(mainLayer);
    loadingLayer = new LoadingSample3();
    addChild(loadingLayer);
    LLoadManage.load(
        imgData,
        function(progress){
            loadingLayer.setProgress(progress);
        },
        gameInit
    );
}

function gameInit(result) {
    imgList = result;
    removeChild(loadingLayer);
    loadingLayer = null;
    var bd = new LBitmapData(imgList['btn_down']);
    var bt = new LBitmap(new LBitmapData(imgList['btn_down'], 188, 55, 17, 17)); // 图片是512*512,反正就是跟设置的大小不一样就行
    mainLayer.addChild(bt);
    var arr, img = [225, 200, 150, 255];
    console.log(bt.bitmapData.width);
    bt.bitmapData.lock();
    for (var i = 0; i < bt.bitmapData.width; i++) {
        for (var j = 0; j < bt.bitmapData.height; j++) {
            arr = bt.bitmapData.getPixel(i, j);
            arr[0] = arr[0] / 255 * img[0] >> 0;
            arr[1] = arr[1] / 255 * img[1] >> 0;
            arr[2] = arr[2] / 255 * img[2] >> 0;
            bt.bitmapData.setPixel(i, j, arr);
        }
    }
    bt.bitmapData.unlock();
}
回复

使用道具 举报

37

主题

8

好友

9311

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

地板
发表于 2014-9-22 18:09:24 |只看该作者
孤枫独行 发表于 2014-9-22 17:16
我的需求是这样的,我需要截取一张大图中的一块小图,然后对这块小图的LBitmapData变化颜色
代码 ...

你的使用方法貌似有些问题
API文档中不是有使用方法吗
http://lufylegend.com/api/zh_CN/ ... tml#method_setPixel
测试的例子也是可以运行的
不回答与技术和引擎不相关的问题
回复

使用道具 举报

2

主题

0

好友

30

积分

士兵

Rank: 1

5#
发表于 2014-9-22 18:48:27 |只看该作者
lufy 发表于 2014-9-22 18:09
你的使用方法貌似有些问题
API文档中不是有使用方法吗
http://lufylegend.com/api/zh_CN/ ... tml#method_ ...

好吧,我回去组织好语言再跟你说
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-4-29 23:25 , Processed in 0.051127 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部