lufy's legend

标题: 1.9.2 LBitmapData. setPixel BUG [打印本页]

作者: 孤枫独行    时间: 2014-9-22 16:04
标题: 1.9.2 LBitmapData. setPixel BUG
测试代码:
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去掉就好使了
作者: lufy    时间: 2014-9-22 16:12
利用颜色新建LBitmapData的话,
应该是var bitmapData = new LBitmapData('#123456', 0, 0, 100, 100);
你试一下看看
作者: 孤枫独行    时间: 2014-9-22 17:16
本帖最后由 孤枫独行 于 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();
}
作者: lufy    时间: 2014-9-22 18:09
孤枫独行 发表于 2014-9-22 17:16
我的需求是这样的,我需要截取一张大图中的一块小图,然后对这块小图的LBitmapData变化颜色
代码 ...

你的使用方法貌似有些问题
API文档中不是有使用方法吗
http://lufylegend.com/api/zh_CN/ ... tml#method_setPixel
测试的例子也是可以运行的
作者: 孤枫独行    时间: 2014-9-22 18:48
lufy 发表于 2014-9-22 18:09
你的使用方法貌似有些问题
API文档中不是有使用方法吗
http://lufylegend.com/api/zh_CN/ ... tml#method_ ...

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




欢迎光临 lufy's legend (http://lufylegend.com/forum/) Powered by Discuz! X2.5