首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getPixel32不准确

getPixel32不准确
EN

Stack Overflow用户
提问于 2013-08-21 20:34:56
回答 1查看 169关注 0票数 0
代码语言:javascript
复制
function encodeBmp(s:String){
    s = Base64.Encode(s);
    var width:Number = Math.ceil(Math.sqrt(s.length/4));
    var bmp:BitmapData = new BitmapData(width,width,true,0x00000000);
    var pos:Number=0; //track position in string
    for(var x:Number=0;x<width;x++){
        for(var y:Number=0;y<width;y++){
            var col="0x";
            for(var i:Number=0;i<4;i++){
                col+=getHex(s.charAt(pos));
                pos++;
            }
            bmp.setPixel32(x,y,col);
            trace(col + " > 0x" + bmp.getPixel32(x,y).toString(16));
        }
    }
    return bmp.clone();
}

基本上,跟踪语句返回以下内容:

代码语言:javascript
复制
0x56326868 > 0x56326868
0x64434270 > 0x64424270
0x63794230 > 0x63794331
...

为什么getPixel32的结果与设置值的结果不同,我如何解决这个问题?

编辑: getPixel是准确的,但是没有get/getPixel 32那样的额外位.我希望每个像素有更多的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-22 08:21:51

您正在对字符串进行Base64编码,以便将其存储在BitmapData中。我希望你不知道,或者感到羞愧。

不管怎么说,我看到的是:

首先,如果您将col输入为String,您将在setPixel32上得到一个编译错误,因为它需要一个uint

现在,我们可以忽略所有循环字符串和十六进制字符串来获得一些简单的代码来重现问题。

代码语言:javascript
复制
var bitmapData:BitmapData = new BitmapData(1, 1);
bitmapData.setPixel32(0, 0, 1682129520);
trace(bitmapData.getPixel32(0, 0));

通过使用int文字,我们可以看到它不是类型强制的问题,而是BitmapData内部的问题。这是有意义的,因为BitmapData的目的是存储图形数据,所以以图形相似但不精确的方式存储图形很好。

你可能在Flash中看到了预倍增α的副作用。这也解释了为什么您看不到getPixelsetPixel的任何问题。

你可以在这里读到更多关于它的信息:http://www.quasimondo.com/archives/000665.php

那么如何解决这个问题呢?使用正确的数据类型ByteArray用于存储二进制数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18367157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档