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: をスローします。text=エラー #2124。Imageでは、AS 側で再編成してソース プロパティとして使用できるように、byteArray 形式をどのように処理すればよいでしょうか。

4

2 に答える 2

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 に答える
1

あなたの問題はbyte-orderingだと思います。入力 ByteArray から読み取った後、バイトを反転する必要があります。出力 ByteArray については、再度反転するか、そのendianプロパティを に設定する必要がありますEndian.LITTLE_ENDIAN

于 2012-04-19T15:06:24.410 に答える