В настоящее время я работаю над приложением Steganogrpahy для Android в качестве проекта класса. Я создал объект, который будет кодировать изображение с другим изображением и возвращать закодированное растровое изображение. Этот код запускается в отдельном потоке.
new Thread(new Runnable()
{
public void run()
{
Bitmap encoded_image = null;
Encryptor encryptor = new Encryptor();
encoded_image = encryptor.encode_image_in_image(
image_location,message_image_location);
}
}).start();
После кодирования растрового изображения я передавал растровое изображение в файловый браузер, который я создал, чтобы сохранить растровое изображение в виде png-изображения. Этот метод работает для небольших изображений, однако, когда большое изображение кодируется и передается в подэтап, приложение останавливается и возвращается к основному действию.
private void pass_image_to_file_browser( Bitmap image )
{
Intent intent = new Intent(Encrypt.this,FileBrowser.class);
intent.putExtra( Intent.EXTRA_STREAM, image );
startActivity( intent );
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Bundle bundle = this.getIntent().getExtras();
Bitmap image = bundle.getParacable(Intent.EXTRA_STREAM);
}
Я предполагал, что большое растровое изображение должно быть слишком большим для отправки между действиями с использованием намерения, поэтому я решил просто сохранить изображение во временном местоположении и передать местоположение изображения в вспомогательное действие. Который затем сохраняет изображение PNG, где пользователь указывает и удаляет временный файл изображения.
private void save_bitmap( Bitmap image, String location )
{
FileOutputStream fileOutputStream = new FileOutputStream(location);
BufferedOutputStream buffered_output_stream = new
BufferOutputStream(fileOutputStream);
image.compress(CompressFormat.PNG, 0, buffered_output_stream);
buffered_output_stream.flush();
buffered_output_stream.close();
}
Это решает проблему отправки большого растрового изображения от одного действия к другому, однако, создало новую проблему, которую я не смог решить. Как временное изображение, которое сохраняется перед передачей местоположения файла в вспомогательное действие, так и файл изображения после повторного сохранения изображения с помощью файлового браузера, у обоих слегка изменился цвет. Это изменение цвета неузнаваемо невооруженным глазом, но при декодировании изображения вызывает много проблем.
У меня была одна мысль, что Bitmap.Config меняется с ARGB_8888 на ARGB_4444 или RGB_565, однако после отладки это не так. Растровое изображение создается как ARGB_8888 и сохраняется как растровое изображение ARGB_8888 и никогда не изменяется между ними. Код по-прежнему работает, если я передаю все растровое изображение в файловый браузер и сохраняю растровые изображения одинаково в обоих местах. У меня нет никаких мыслей о том, что еще может быть причиной этого. Я ищу предложения о том, что еще может быть причиной проблемы. Извините, что я собирался публиковать изображения на выходе в обоих случаях, однако переполнение стека не позволило бы мне на моем уровне репутации. Спасибо.