Преобразование растрового кода Java в код C# в консольном приложении

Я пытаюсь преобразовать код Java в С# Итак, вот код Java

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap decodeStream = BitmapFactory.decodeStream(openInputStream, null, options);

Затем я сохраняю это растровое изображение с помощью

File appDirectory= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File dest = new File(appDirectory, "yourImage.jpg");


    try (FileOutputStream out = new FileOutputStream(dest)) {
        decodeStream.compress(Bitmap.CompressFormat.JPEG, 100, out); // bmp is your Bitmap instance
        
    } catch (IOException e) {
        e.printStackTrace();
    }

Теперь кто-нибудь может помочь мне преобразовать этот код в С#. Я пытался импортировать Xamrine Android DLL, но не добился успеха. Я


person Mayur Asodariya    schedule 29.06.2021    source источник
comment
Я пытался импортировать Xamrine Android DLL – почему? Пожалуйста, поделитесь своим лучшим опытом в коде C#, который у вас есть.   -  person Fildor    schedule 29.06.2021
comment
Также этот комментарий // PNG is a lossless format, the compression factor (100) is ignored не имеет смысла, если вы сохраняете в JPG?   -  person Fildor    schedule 29.06.2021


Ответы (1)


Насколько я понимаю, вам нужно только загрузить простое изображение jpg. Это все, что делает ваш Java-код.

Если вы хотите загрузить изображение jpg из потока, вы можете использовать

Bitmap.FromStream()

e.g.

using (FileStream fs = new FileStream(@"Image Address.jpg", FileMode.Open, FileAccess.Read))
{
    var decodeStream = Bitmap.FromStream(fs);
}

конечно, вы можете открыть свое изображение и без потока.

var image = Bitmap.FromFile(@"Image Address.jpg");

Итак, ваш код будет примерно таким

File appDirectory= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File dest = new File(appDirectory, "yourImage.jpg");
var image = Bitmap.FromFile(dest.FullName);

Вы не можете получить доступ к классу Bitmap из коробки.

Для dot net core установите пакет System.Drawing.Common.

Для фреймворка dot net добавьте ссылку на System.Drawing.

Для Xamarin см. этот ответ https://stackoverflow.com/a/34869330/5964792

person MrMoeinM    schedule 29.06.2021
comment
На самом деле что-то происходит в этой строке options.inPreferredConfig = Bitmap.Config.ARGB_8888; где растровое изображение настроено на эту текстуру. Так что это то, что я ищу в С#. - person Mayur Asodariya; 29.06.2021
comment
@MayurAsodariya ARGB_8888 означает использование 8 бит для альфа-, красного, зеленого и синего каналов. В jpg у вас нет альфа-канала, и вся эта информация обычно находится в заголовке изображения. Эта конфигурация обычно необходима, когда вы вводите необработанное изображение, а не jpg или png. Вот почему он предпочел в своем имени. - person MrMoeinM; 29.06.2021