Java android中用于在画布上显示位图的浮点数组到字节数组

Java android中用于在画布上显示位图的浮点数组到字节数组,java,android,bitmap,floating-point,bytearray,Java,Android,Bitmap,Floating Point,Bytearray,我在java中有一个浮点数组,希望将每个元素转换为其对应的字节数组,以使用android.graphics.Bitmap和Bitmapfactory显示,但是这个操作似乎不起作用,任何智慧的话都将不胜感激 package com.bitmapdisplay; import android.app.Activity; import android.os.Bundle; import android.content.Context; import android.graphics.Bitmap; i

我在java中有一个浮点数组,希望将每个元素转换为其对应的字节数组,以使用android.graphics.Bitmap和Bitmapfactory显示,但是这个操作似乎不起作用,任何智慧的话都将不胜感激

package com.bitmapdisplay;
import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.View;
import android.view.Window;


public class BitmapDiplay extends Activity {
/** Called when the activity is first created. */
    float[] array = {1, 6, 1, 4, 5, 0, 8, 7, 8, 6, 1,0, 5 ,6, 1,8};
    float[] new_array= new float[array.length];
    int[] int_array;
    byte[] byte_array;
    private static final int MASK = 0xff;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);


    for(int k = 0;k<array.length;k++)
    {
        new_array[k] = (float)((double)array[k]*2);
        int_array[k] = Float.floatToRawIntBits(new_array[k]);
        byte_array = intToByteArray(int_array[1]);
        setContentView(new Panel(this));
    }

}



public static byte[] intToByteArray(int param) {
    byte[] result = new byte[4];
    for (int i = 0; i < 4; i++) {
        int offset = (result.length - 1 - i) * 8;
        result[i] = (byte) ((param >>> offset) & MASK);
    }
    return result;
}




class Panel extends View {
    public Panel(Context byteArray) {
        super(byteArray);
    }
    @Override
    public void onDraw(Canvas canvas) {
        Bitmap _scratch = BitmapFactory.decodeByteArray(byte_array, 0, byte_array.length);
        canvas.drawColor(Color.BLACK);
        canvas.drawBitmap(_scratch, 10, 10, null);
    }
}
}
package com.bitmapdisplay;
导入android.app.Activity;
导入android.os.Bundle;
导入android.content.Context;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.view.view;
导入android.view.Window;
公共类BitmapDiplay扩展活动{
/**在首次创建活动时调用*/
float[]数组={1,6,1,4,5,0,8,7,8,6,1,0,5,6,1,8};
float[]新数组=新的float[array.length];
int[]int_数组;
字节[]字节数组;
专用静态最终整数掩码=0xff;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
用于(int k=0;k>>偏移量)和掩码);
}
返回结果;
}
类面板扩展视图{
公共面板(上下文byteArray){
超级(拜特利);
}
@凌驾
公共空白onDraw(画布){
位图_scratch=BitmapFactory.decodeByteArray(字节数组,0,字节数组.长度);
画布。drawColor(颜色。黑色);
canvas.drawBitmap(_scratch,10,10,null);
}
}
}
我正在从一个单浮点数转换为它的4位数组表示形式,但是要做到这一点,我首先将它转换为原始整数,然后再转换为字节[]。我不确定这是不是最好的办法。然而,最后我希望构建一个计算出的音频曲目对数频谱振幅的浮点矩阵,并将该矩阵映射到位图。但是,我一直坚持将单个数组转换为位图。我不熟悉android和java。如果人们建议使用另一种方法来执行此任务,那将非常感谢。

(byte\u array,…)希望byte\u array是“压缩的图像数据的字节数组”。我怀疑某些任意字节是否构成了压缩图像。也许你应该反复调用Canvas.drawPoint()

for(int k = 0;k < array.length;k++)
{
  ..
  byte_array = intToByteArray(int_array[1]);
  ..
}

然而,如果你不知道你看到的是什么,把它变成一张图片看起来就像是时髦的随机颜色。从白色到黑色生成颜色不是更有意义吗?

是的,从白色到黑色将更有意义,或者是某种渐变颜色,但在这个阶段,我只是尝试显示数组,小步骤。谢谢你的帮助,今晚我会试一试。:)@digiphd-将浮点转换为int比混淆其字节表示更容易。显示数组的最简单方法/步骤可能包括
Canvas.drawPoint
drawRect
。并使用类似于
Color.rgb(数组[0]*255,数组[0]*255,数组[0]*255)的内容设置
Paint.setColor
float[] array = {1, 6, 1, 4, 5, 0, 8, 7, 8, 6, 1,0, 5 ,6, 1,8};
ByteBuffer byteBuf = ByteBuffer.allocate(4 * array.length);
FloatBuffer floatBuf = byteBuf.asFloatBuffer();
floatBuf.put(array);
byte [] byte_array = byteBuf.array();