小编Cyb*_*ron的帖子

decodeByteArray和copyPixelsToBuffer无法正常工作.SkImageDecoder :: Factory返回null

我有一个类TouchPoint,它实现了Serializable,因为它包含Bitmap,我为该类编写了writeObject和readObject:

private void writeObject(ObjectOutputStream oos) throws IOException {
    long t1 = System.currentTimeMillis();
    oos.defaultWriteObject();
    if(_bmp!=null){
        int bytes = _bmp.getWidth()*_bmp.getHeight()*4;

        ByteBuffer buffer = ByteBuffer.allocate(bytes); 
        _bmp.copyPixelsToBuffer(buffer);

        byte[] array = buffer.array();      

        oos.writeObject(array);

    }
    Log.v("PaintFX","Elapsed Time: "+(System.currentTimeMillis()-t1));
}

private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException{
    ois.defaultReadObject();
    byte[] data = (byte[]) ois.readObject();
    if(data != null && data.length > 0){
        _bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是我得到了

SkImageDecoder :: Factory返回null

那我该怎么办呢.我知道可能的解决方案是将writeObject()更改为

ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
_bmp.compress(Bitmap.CompressFormat.PNG, 100, byteStream);
oos.writeObject(byteStream.toByteArray);
Run Code Online (Sandbox Code Playgroud)

但这种方法慢了近10倍.

  • copyPixelsToBuffer~14ms用于写入图像
  • _bmp.compress~160ms

更新 发现实际问题是在之后

buffer.array(); …
Run Code Online (Sandbox Code Playgroud)

java android bytearray bitmap serializable

8
推荐指数
1
解决办法
5129
查看次数

android如何保存位图 - buggy代码

我试图序列化一个类,我有一个位图变量.这是有点工作的代码....我需要帮助找出仍然存在的问题.....

private Bitmap myVideoScreenshotBm;

private void writeObject(ObjectOutputStream out) throws IOException{

    out.writeInt(myVideoScreenshotBm.getRowBytes());
    out.writeInt(myVideoScreenshotBm.getHeight());
    out.writeInt(myVideoScreenshotBm.getWidth());

    int bmSize = myVideoScreenshotBm.getHeight() * myVideoScreenshotBm.getRowBytes();
    ByteBuffer dst= ByteBuffer.allocate(bmSize);

    myVideoScreenshotBm.copyPixelsToBuffer(dst);

    byte[] bytesar=new byte[bmSize];
    dst.position(0);
    dst.get(bytesar);

    out.write(bytesar);


}

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{

    int nbRowBytes=in.readInt();
    int height=in.readInt();
    int width=in.readInt();
    //
    int bmSize = nbRowBytes * height;
    byte[] toread= new byte[bmSize];

    in.read(toread, 0, toread.length);
    ByteBuffer dst= ByteBuffer.allocate(bmSize);
    dst.put(toread);
    dst.position(0);
    myVideoScreenshotBm=Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
    myVideoScreenshotBm.copyPixelsFromBuffer(dst);

}
Run Code Online (Sandbox Code Playgroud)

我没有得到错误,但我得到的位图是错的...另外,我不知道如何知道哪个Bitmap.Config标志是合适的......怎么知道?

任何帮助?

serialization android bitmap save

7
推荐指数
1
解决办法
2万
查看次数

MySQL连接表,其中表名是另一个表的字段

我有5张桌子.一个主要和另外四个(他们有不同的列).

  1. 对象
  2. obj_mobiles
  3. obj_tablets
  4. obj_computers

这是我的主表(对象)的结构.

ID | 类型| 名字| 等等...

所以我想要做的是将对象与其他(obj_mobiles,obj_tablets,...)表连接,具体取决于类型字段.我知道我应该使用动态SQL.但我无法制作程序.我认为应该看起来像这样.

SELECT objects.type into @tbl FROM objects;
PREPARE stmnt FROM "SELECT * FROM objects AS object LEFT JOIN @tbl AS info ON object.id = info.obj_id"; 
EXECUTE stmnt;
DEALLOCATE PREPARE stmnt;
Run Code Online (Sandbox Code Playgroud)

Aslo伪代码

SELECT * FROM objects LEFT JOIN [objects.type] ON ... 
Run Code Online (Sandbox Code Playgroud)

谁能发布程序?另外,我希望所有行不仅仅是1行.谢谢.

mysql dynamic-sql

6
推荐指数
1
解决办法
8600
查看次数