Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从int[]到图像png_Java_Android_Image - Fatal编程技术网

Java 从int[]到图像png

Java 从int[]到图像png,java,android,image,Java,Android,Image,在一个项目中,我正在使用隐写术在图像中隐藏文本。我在应用程序中实现了一个类,它要求我选择一幅图像(.png)并修改每个像素的最低有效位。现在的问题是,我有一个整数数组,我必须从中创建一个新图像(.png),并将其保存到外部内存中。我该怎么做? PS:我不能使用BuffereImage 这是修改最低有效位之前的代码 package com.dev.paolo.sicinf; import android.content.CursorLoader; import android.content.I

在一个项目中,我正在使用隐写术在图像中隐藏文本。我在应用程序中实现了一个类,它要求我选择一幅图像(.png)并修改每个像素的最低有效位。现在的问题是,我有一个整数数组,我必须从中创建一个新图像(.png),并将其保存到外部内存中。我该怎么做? PS:我不能使用BuffereImage

这是修改最低有效位之前的代码

package com.dev.paolo.sicinf;

import android.content.CursorLoader;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.ActionBarActivity;

import java.io.File;
import java.math.BigInteger;
import java.sql.SQLException;

public class SendKey extends ActionBarActivity{

private static final int FILE_SELECT_CODE=0;

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("file/");
    startActivityForResult(Intent.createChooser(intent, "Select an Image"), FILE_SELECT_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode)
    {
        case FILE_SELECT_CODE:
            if(resultCode==RESULT_OK)
            {
                Uri uri2 = data.getData();
                String[] proj = {MediaStore.Images.Media.DATA};
                CursorLoader cursorLoader = new CursorLoader(this,uri2,proj,null,null,null);
                Cursor cursor = cursorLoader.loadInBackground();
                int column_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                String uri = cursor.getString(column_index);
                File file = new File(uri);
                Bitmap img = BitmapFactory.decodeFile(uri);
                int height = img.getHeight();
                int width = img.getWidth();
                int[] pixel = new int[height * width];
                img.getPixels(pixel, 0, width, 1, 1, width-1, height-1);
                String key = "prova";
                byte[] b = key.getBytes();
                int count = 0;
                for (byte current_byte : b) {
                    for (int j = 7; j >= 0; j--) {
                        int lsb = (current_byte >> j) & 1;
                        pixel[count] = (pixel[count] & 0xfffffffe) + lsb;
                        count++;
                    }
                }
                //from int[] create image and save to external memory
            }
            break;
    }
}

}

使用Bitmap.createBitmap(int[]颜色、int偏移量、int步幅、int宽度、int高度、Bitmap.Config配置)创建位图对象。然后使用Bitmap.compress()将其写入文件

,但我只知道偏移量、步幅、宽度、高度。。。对于配置和颜色,我可以从何处获取这些值?颜色是您的数组。config就是您想要的位深度,可能是ARGB_8888