Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

преобразование bitmap в byte[]

82K
23 июля 2017 года
accdefault
7 / / 23.07.2017
Добрый день. Подскажите что в коде не так:
Код:
//открываю png картинку
Bitmap imgpng = new Bitmap("temp\1.png");
//сохраняю её в jpeg
imgpng.Save("temp\1.jpg", ImageFormat.Jpeg);
//теперь открываю jpeg картинку
Bitmap img = new Bitmap("temp\1.jpg");


//тут преобразовываю bitmap в byte[]
ImageConverter converter = new ImageConverter();
byte[] bTemp = (byte[])converter.ConvertTo(img, typeof(byte[]));

//тут преобразовываю byte[] в bitmap
Bitmap img2;
using (var ms = new MemoryStream(bTemp))
{
    img2 = new Bitmap(ms);
}

//сохраняю результат и ОШИБКА
img2.Save("temp\1-f.jpg", ImageFormat.Jpeg);
Текст ошибки:

************** Текст исключения **************
System.Runtime.InteropServices.ExternalException (0x80004005): В GDI+ возникла ошибка общего вида.
в System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
в System.Drawing.Image.Save(String filename, ImageFormat format)

PS:
Если не пересохранять в jpeg то всё работает нормально
1
23 июля 2017 года
kot_
7.3K / / 20.01.2000
jpeg - это изображение которое сжато c потерями. Прежде чем ковертировать его нужно разжать, он не может просто так быть приведен к битмапу.
For example - https://stackoverflow.com/questions/24383256/how-c...
82K
23 июля 2017 года
accdefault
7 / / 23.07.2017
Цитата: kot_
jpeg - это изображение которое сжато c потерями. Прежде чем ковертировать его нужно разжать, он не может просто так быть приведен к битмапу.
For example - https://stackoverflow.com/questions/24383256/how-c...

Спасибо, ссылка помогла, хотя не сосем понятно чем отличается
Bitmap img = new Bitmap("temp\1.jpg");
от
Bitmap img;
using (Stream bmpStream = System.IO.File.Open("temp\1.jpg", System.IO.FileMode.Open))
{
Image image = Image.FromStream(bmpStream);

img = new Bitmap(image);

}

82K
23 июля 2017 года
accdefault
7 / / 23.07.2017
Всё равно не получается сжать картинку...
Код:
ImageConverter converter = new ImageConverter();
string sGuid = Guid.NewGuid().ToString();
//сколько байт занимала картинка
byte[] bBylo = (byte[])converter.ConvertTo(img, typeof(byte[]));
//сохранение оригинальной картинки
img.Save("temp\original-" + sGuid + ".jpg");
//пересохранение в jpeg
img.Save("temp\jpg-"+ sGuid + ".jpg", ImageFormat.Jpeg);
//тут поидее мы открываем .jpeg картинку
Bitmap img2;
using (Stream bmpStream = System.IO.File.Open("temp\jpg-" + sGuid + ".jpg", System.IO.FileMode.Open))
{
 Image vTemp = Image.FromStream(bmpStream);
 img2 = new Bitmap(vTemp);
}
//сохранение пересохранённой картинки
img2.Save("temp\posle-" + sGuid + ".jpg");
//размер новой картинки
byte[] bReturn = (byte[])converter.ConvertTo(img2, typeof(byte[]));
//отображение разницы размеров
MessageBox.Show((bBylo.Length - bReturn.Length).ToString());

Она получается отрицательной, тоесть изначальная картинка занимала меньше памяти
Как сжать картинку и отправить её по сети? В оригинале она весит 2,5м в jpeg 200к
1
24 июля 2017 года
kot_
7.3K / / 20.01.2000
Во первых я не очень понял смысл ваших манипуляций.
Вы открыли картинку и сохранили ее в jpeg. Ок. Зачем вы снова разжимаете ее в bmp и сохраняете ее, попутно удивляясь вдруг выросшему размеру?
Во вторых, разница между вашим кодом:
 
Код:
Bitmap img = new Bitmap("temp1.jpg");
и кодом в примере как раз таки в том что:
Цитата:
jpeg - это изображение которое сжато c потерями. Прежде чем ковертировать его нужно разжать, он не может просто так быть приведен к битмапу.

82K
25 июля 2017 года
accdefault
7 / / 23.07.2017
Цитата: kot_
Во первых я не очень понял смысл ваших манипуляций.
Вы открыли картинку и сохранили ее в jpeg. Ок. Зачем вы снова разжимаете ее в bmp и сохраняете ее, попутно удивляясь вдруг выросшему размеру?

Я просто думал что bitmap из jpeg будет меньше весить чем bitmap из bmp.

1
25 июля 2017 года
kot_
7.3K / / 20.01.2000
Цитата: accdefault

Я просто думал что bitmap из jpeg будет меньше весить чем bitmap из bmp.

Bitmap всегда будет иметь размер width * height * numComponents (в простейшем случае) вне зависимости от того что послужило его источником.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог