从字节流创建图像的最快方法是什么?

时间:2013-12-12 14:26:19

标签: java android

我有一个电子设备(扫描仪),通过wifi向android设备发送字节。 在android我采取字节并创建整数数组(每个数字代表像素)。 然后我用位图类创建png文件。 图像看起来应该是这样。 我在单独的线程中处理图像。 我的目标是创建新图像并以最快的方式替换旧图像。 事实上,我想创造电影的幻觉。

问题在于创建图像需要花费太多时间。

以下是相关代码

Bitmap mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(mBitmap);
Paint paint = new Paint(); 

...

int count = mBufferIn.read(buffer);
while(count != -1)
{
for(int i=0;i<count;i=i+2)
{
    k = ((buffer[i] << 8) & 0x0000ff00) | (buffer[i+1] & 0x000000ff);
    Log.e("TCP Client", "k=" + Integer.toString(k) );   
    colors[pixelIndex]=k;
    pixelIndex++;
}
count = mBufferIn.read(buffer);

if(count ==-1)
{
         try {
                 pixelIndex=0;
             c.drawBitmap(colors, 0, width, 0, 0, width, height, false, paint);

...

我已将代码更改为:

try {
                    while((numberOfRead =mBufferIn.read(buffer)) != -1)
                    {
                        babff.append(buffer, 0, numberOfRead);
                        //offset = offset + numberOfRead;
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                byte [] imageBytes = babff.toByteArray();

                BitmapFactory.Options opt = new BitmapFactory.Options();
                opt.outHeight = height;
                opt.outWidth = width;

                Bitmap bitmap = BitmapFactory.decodeByteArray (imageBytes, 0, imageBytes.length,opt);

                Paint paint1 = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
                Canvas canvas = new Canvas(bitmap);
                canvas.drawBitmap(bitmap, 0, 0, paint1); 

现在的问题是位图是NULL

1 个答案:

答案 0 :(得分:0)

逐像素生成图像设置非常慢。读取字节数组中的所有内容,并从字节数组

创建位图