Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/46: Рейтинг темы: голосов - 46, средняя оценка - 4.63
 Аватар для Jang
88 / 4 / 2
Регистрация: 07.12.2009
Сообщений: 60

Сохранить массив байт в файл в виде изображения

21.09.2010, 22:45. Показов 9470. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалйста!
Есть массив байт пол ученый из камеры. Нужно сохранить этот массив в файл в виде изображения.
Напишите пожалуйста как это сделать. Размер изображения известен. Есть код реализации на C++, могу выложить если что
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.09.2010, 22:45
Ответы с готовыми решениями:

Как сохранить массив байт в файл?
Есть массив байт QByteArray, присылаемые мне по UDP. Как сохранить в файл - я знаю. Но как сохранить, в удобоваримом виде? Т.е. чтобы...

Сохранить скриншот в файл или получить массив байт
В идеале нужно получить массив байт изображения, но можно и просто сохранить скриншот в файл. Скриншот делаю таким образом // get the...

Как сохранить файл из массива байт
Ребят, мозгов не хватает, вытаскиваю из БД массив байт как его сохранить на железаке

13
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 23:21
Jang,
C#
1
2
System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes);
System.Drawing.Bitmap  b  = System.Drawing.Image.FromStream(ms);
, где bytes - массив байт.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
21.09.2010, 23:30
C#
1
2
3
4
5
6
// buff это массив байт.
using (MemoryStream ms = new MemoryStream(buff)) {
    using (Image img = Image.FromStream(ms)) {
        img.Save("X:\\some.jpg");
    }
}
Добавлено через 36 секунд

Не по теме:

Эх, опоздал :)

0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.09.2010, 23:32
Цитата Сообщение от SSTREGG Посмотреть сообщение
Эх, опоздал
Скорее дополнили, а не опоздали - Ваш код безопаснее.
0
 Аватар для Jang
88 / 4 / 2
Регистрация: 07.12.2009
Сообщений: 60
22.09.2010, 09:28  [ТС]
У меня я так понимаю сырые данные. Вот код на C++. У меня не получается сделать что то подобное на C# ((


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void kreved()
{
    // получаем изобр
    BYTE* buf = new BYTE[1920*1080*3];
    int iw, ih;
    double dt;
    bool br = _GetRealRGB(icamera - 1, buf, &iw, &ih, &dt);  //В этой функции буфер наполняется
    if(!br) return;
 
//Дальше не могу сделать подобное в C# (
    // создаем device-independent bmp
    BITMAPINFO bi;
    ZeroMemory(&bi, sizeof(bi));
    bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bi.bmiHeader.biCompression = BI_RGB;
    bi.bmiHeader.biBitCount = 24;
    bi.bmiHeader.biPlanes = 1;
    bi.bmiHeader.biWidth = iw;
    bi.bmiHeader.biHeight = -ih;
    bi.bmiHeader.biSizeImage = iw * ih * 3;
    BYTE* pbuff;
    
    HBITMAP bmp = ::CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, (void**)&pbuff, NULL, 0);
    
    // копируем буфер
    int lines = SetDIBits(NULL, bmp, 0, ih, buf, &bi, DIB_RGB_COLORS);
    TRACE("\n lines = %i \n", lines);
 
    // рисуем в окошке
    CStatic * w = (CStatic*)GetDlgItem(IDC_STATIC1);
    w->SetBitmap(bmp);
 
    // сохраняем в файл
    CImage image;
    image.Attach(bmp);
    HRESULT hr = image.Save(_T("D:\\test.bmp"), Gdiplus::ImageFormatBMP);
 
    DeleteObject(bmp);
    delete [] buf;
}
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
22.09.2010, 11:00
Jang, выше приведены решения вышей проблемы. Что конкретно работает не так?
0
 Аватар для Jang
88 / 4 / 2
Регистрация: 07.12.2009
Сообщений: 60
24.09.2010, 14:15  [ТС]
Ошибка: недопустимый параметр в строчке using (Image img = Image.FromStream(ms))
0
Заблокирован
24.09.2010, 14:46
нужно подключить
C#
1
2
using System.Drawing;
using System.Drawing.Imaging;
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
24.09.2010, 14:48
Напишите весь код.
0
 Аватар для Jang
88 / 4 / 2
Регистрация: 07.12.2009
Сообщений: 60
24.09.2010, 15:12  [ТС]
Есть функция, от которой я получаю буфер с данными ну и далее как в примере описанном выше.

C#
1
2
3
4
5
6
7
8
using System.Drawing;
using System.Drawing.Imaging; // подключены 
 
using (MemoryStream ms = new MemoryStream(buff)) {
    using (Image img = Image.FromStream(ms)) {  //Тута ошибка (
        img.Save("X:\\some.jpg");
    }
}
Если сделать таким способом:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    private Image CreateImage(int width, int heigth, byte[] buffer)
    {
      Image _image;
      Bitmap bmp = new Bitmap(width, heigth, PixelFormat.Format24bppRgb);
      Rectangle rect = new Rectangle(Point.Empty, bmp.Size);
      BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);
      try
      {
        IntPtr ptr = bmpData.Scan0;
        int bytes = bmpData.Stride * bmpData.Height;
        Marshal.Copy(buffer, 0, ptr, bytes);
      }
      finally
      {
        bmp.UnlockBits(bmpData);
        _image = (Image)bmp;
      }
      return _image;
    }
, то работатет. Но хотелось бы понять, почему не фурычит другой вариант
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
24.09.2010, 15:12
Dzhej-Dzhej, ошибка не из-за этого, и System.Drawing.Imaging здесь ни причем.
Jang, ошибка во время выполнения или компиляции?
0
 Аватар для Jang
88 / 4 / 2
Регистрация: 07.12.2009
Сообщений: 60
24.09.2010, 15:48  [ТС]
во время выполнения

Добавлено через 2 минуты
Может проблема в передаваемых данных? Т.е. без конкретных данных как их построить сохдать их нельзя?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
24.09.2010, 15:55
Скорее всего GDIP не распознает данные в буфере как изображение, из-за этого и ошибка. Попробуйте вместо Image.FromStream(ms), Image.FromStream(ms, false, false);
0
 Аватар для Jang
88 / 4 / 2
Регистрация: 07.12.2009
Сообщений: 60
24.09.2010, 16:12  [ТС]
Да, я тоже думаю скорей всего проблема в этом.
Image.FromStream(ms, false, false); не помогло (
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.09.2010, 16:12
Помогаю со студенческими работами здесь

Как сохранить область формы в виде изображения?
Привет, хотел поинтересоваться, у меня будет кнопка сохранить(см. фото), по нажатию этой кнопки, надо сделать так, чтобы определенная...

Как сохранить файл из массива байт, не зная расширения?
Здравствуйте Мне нужно сохранять файл из массива байт. Возможно ли это сделать, не зная расширения? Есть ли способы узнать расширение,...

Преобразование изображения в массив байт
Уважаемые коллеги, подскажите как из изображения(тип любой) получить массив байт? Слышал, что можно через Encoding, а ещё как? Рассмотрю...

Изображения, палитра, массив байт
Есть массив байт изображения 8x4 02 02 02 02 04 02 02 02 02 02 02 02 04 02 02 02 02 02 02 02 04 02 02 02 02 02 02 02 04 02 02 02 Если...

Чтение изображения в массив байт
Моя задача: считать изображение в массив байт, применить к нему фильтр Paeth (используемый в PNG), то есть закодировать, тут же...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru