0

以下是代码片段:

AS 方面:(img 是对<Image>实例的引用)

        bitmapData = Bitmap(img.content).bitmapData;
        var pixels:ByteArray = bitmapData.getPixels(bitmapData.rect);
        pixels.position = 0;
        var output:ByteArray = new ByteArray();
        img_width = bitmapData.width;
        img_height = bitmapData.height;
        ////invoke C code by alchemy
        lomoEncoder.encode(pixels, output, img_width, img_height);
        var newImage:Image = new Image();
        //can't show the image
        newImage.source = output;

C代码:

AS3_Val dest;
AS3_Val source;
unsigned char* pixels = (unsigned char *)malloc(Size);
AS3_ByteArray_readBytes(pixels, source, Size);
pixels = darkCornerLomoEffect((unsigned char*)pixels, image_width, image_height);
AS3_ByteArray_writeBytes(dest, (char*) pixels, length);

在 AS 端,当dest从 C 中获取时,loader.load(dest) 抛出一个错误:Unhandled IOErrorEvent:。文本=错误 #2124。那么如何处理 byteArray 格式,以便 AS 端可以重组并用作Image源属性呢?

4

2 回答 2

1

我怀疑你的问题是byte-ordering。从输入 ByteArray 读取后,您需要翻转字节。对于输出 ByteArray,您要么需要再次翻转它们,要么将其endian属性设置为Endian.LITTLE_ENDIAN.

于 2012-04-19T15:06:24.410 回答
1

如果您有一个 bytearray 并且想要加载图像源,您可以执行以下操作:

var b:ByteArray = new ByteArray();
var f:BitmapData = new BitmapData(100, 100);
f.setPixels(new Rectangle(0, 0, 100, 100), b);

请问你能提供一段你的AS3代码吗?

于 2012-04-18T14:06:05.190 回答