![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| 256zib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 7.12.2009 Репутация: нет Всего: нет |
Здравствуйте! Помогите пожалуйста!
Есть массив байт пол ученый из камеры. Нужно сохранить этот массив в файл в виде изображения. Напишите пожалуйста как это сделать. Размер изображения известен. Есть код реализации на C++, могу выложить если что Это сообщение отредактировал(а) 256zib - 22.9.2010, 09:28 |
|||
|
||||
| CYBERDREAM |
|
|||
![]() I think, there4 I am ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1096 Регистрация: 31.10.2006 Где: CyberLand Репутация: 8 Всего: 28 |
Приветствую 256zib, попробуй это
-------------------- Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно) Telegram, skype: kuchuk.artiom |
|||
|
||||
| Kaerus |
|
|||
|
WPF'er ![]() Профиль Группа: Участник Сообщений: 89 Регистрация: 3.9.2010 Репутация: нет Всего: 1 |
256zib
На сколько я помню метод Image.FromStream требует что бы данные в потоке были в одном из форматов (BMP, PNG). Если у вас сырые данные (допустим просто массив яркостей пикселей), то придется:
Как альтернатива можно сделать это через Managed DirectX Это сообщение отредактировал(а) Kaerus - 21.9.2010, 23:51 |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 17 Всего: 306 |
||||
|
||||
| 256zib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 7.12.2009 Репутация: нет Всего: нет |
У меня я так понимаю сырые данные. Вот код на C++. У меня не получается сделать что то подобное на C# ((
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; } |
|||
|
||||
| 256zib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 7.12.2009 Репутация: нет Всего: нет |
Сделал подобное, не получается ( BitmapData bmpData = DllGetPicture(_buffer, ref _width, ref _height); //Здесь я из библиотеки на C++ возвращаю BITMAPINFO bi из предыдущего пример Rectangle rect = new Rectangle(0, 0, 512, 256); Bitmap bmp = new Bitmap(512,256,PixelFormat.Format16bppRgb555); bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat); IntPtr pnt = bmpData.Scan0; System.Runtime.InteropServices.Marshal.Copy(_buffer, 0,pnt,_buffer.Length);//Здесь пишет, что значение не определено bmp.UnlockBits(bmpData); Это сообщение отредактировал(а) 256zib - 22.9.2010, 08:56 |
|||
|
||||
| 256zib |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 7.12.2009 Репутация: нет Всего: нет |
Ребята, все получилось! аж самому не верится )) Спасибо всем!
Bitmap bmp = new Bitmap(512, 256, 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; } |
|||
|
||||
| userdab |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 3.9.2010 Репутация: нет Всего: нет |
Работа с изображениями Здесь есть пример как изобраение преобразовать в массив байт и наоборот
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |