gpt4 book ai didi

android - FREBitmapData 无法编辑

转载 作者:太空狗 更新时间:2023-10-29 14:27:40 25 4
gpt4 key购买 nike

对于 Android Flash 移动应用程序,我尝试从相机中获取预览帧。

不幸的是,我无法使用 AIR 内置相机类,因为相机不会对焦,除非我调用 setMode()(这是 Not Acceptable ,因为它会卡住 UI)。

所以我决定为此编写一个 Native Extension。扩展本身正在运行(我在 NativeCamera.pixels 中获得了正确的图像数据)但我无法使用 FREBitmapData 传输帧。在 ActionScript 端,BitmapData 具有正确的尺寸,但它仍然是黑色。

我的 Java 代码

package com.jumptomorrow.nativecamera;

import java.nio.ByteBuffer;

import com.adobe.fre.FREBitmapData;
import com.adobe.fre.FREContext;
import com.adobe.fre.FREFunction;
import com.adobe.fre.FREObject;

public class NativeCameraGrabFrameFunction implements FREFunction {

@Override
public FREObject call(FREContext context, FREObject[] object) {
try {
FREBitmapData out = null;

try {
out = FREBitmapData.newBitmapData(NativeCamera.size.width, NativeCamera.size.height, false, new Byte[]{0xf,0xf,0x0,0x0});
out.acquire();
ByteBuffer bb = out.getBits();
bb = ByteBuffer.wrap(NativeCamera.pixels);
out.invalidateRect(0, 0, NativeCamera.size.width, NativeCamera.size.height);

} catch (Exception e) {
e.printStackTrace();
}

try {
out.release();
} catch(Exception e) {
e.printStackTrace();
}

return out;

} catch (IllegalStateException e) {
e.printStackTrace();
}

return null;
}

}

我的 ActionScript 代码

package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.utils.ByteArray;

import net.hires.debug.Stats;

public class camera_test extends Sprite
{
private var nc:NativeCameraInterface;
private var bitmap:Bitmap;

public function camera_test()
{
super();

// support autoOrients
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;

nc = new NativeCameraInterface();
try {
nc.startCamera();
}
catch(e:Error) {
trace(e.getStackTrace());
}

addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

protected function onEnterFrame(event:Event):void
{
if(nc) {
var bmpd:BitmapData = nc.getFrame() as BitmapData;

try {
var bmp:Bitmap = new Bitmap(bmpd);

addChild(bmp);
bmp.scaleX = bmp.scaleY = 2;

} catch(e:Error) {
trace("failed");
}
}
}
}
}

有人知道这是什么吗?

最佳答案

这些行不应该...

ByteBuffer bb = out.getBits();
bb = ByteBuffer.wrap(NativeCamera.pixels);

...是这样的吗?

ByteBuffer bb = out.getBits(); // (no change)
bb.position(0);
bb.put(ByteBuffer.wrap(NativeCamera.pixels));

这修改了通过out.getBits()获取的ByteBuffer实例,而不是通过bb =创建一个新的ByteBuffer实例ByteBuffer.wrap(...).

关于android - FREBitmapData 无法编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com