Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2016, 14:12   #1
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
По умолчанию Вебкамера в делфи

Мне нужно по нажатию кнопки сохранять картинки с вебки в Tmemorystream. Щас немного по подробней обьясню:
1 нужно проверить на наличие вебки
2 если вебок 2 то выбрать первую. Выбрать именно надо программно что бы не тревожить лишний раз пользователя
3 делаем фото сохраняем в Tmemorystream а далее сохраняем в файл. Мне нужно именно эта конструкция. Сохранять сразу в файл не надо.
4 отключаемся
С какими компонентами можно сделать то что я сказал выше?

Последний раз редактировалось Legeardo; 25.12.2016 в 14:15.
Legeardo вне форума Ответить с цитированием
Старый 25.12.2016, 15:41   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

ты случайно не в корпорации Майкрософт работаешь на Виндюхой 11-й версии???
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 25.12.2016, 16:18   #3
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
По умолчанию

Не работаю
Legeardo вне форума Ответить с цитированием
Старый 25.12.2016, 16:42   #4
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
По умолчанию

Скачите хотя бы как из 2 вебкамер выбрать 1 программно
Legeardo вне форума Ответить с цитированием
Старый 25.12.2016, 16:48   #5
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
По умолчанию

Или обьясните почему такой код не работает:
Код:
var b:bitmap;
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(b));
Почему в переменную b не сохраняется картинка? Как сделать что бы сохранялась
Legeardo вне форума Ответить с цитированием
Старый 25.12.2016, 16:57   #6
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

savedib - сохранение картинки или кадра? если да, то куда сохраняет???
если в памяти где-то, то надо извлечь. лучше, если будет в виде потока. потом очень удобно из потока сохранять в файл куда надо.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 25.12.2016 в 17:03.
NetSpace вне форума Ответить с цитированием
Старый 25.12.2016, 17:02   #7
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

http://basicsprog.ucoz.ru/publ/6-1-0-27
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 25.12.2016, 17:11   #8
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от Legeardo Посмотреть сообщение
Или обьясните почему такой код не работает:
Код:
var b:bitmap;
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(b));
Почему в переменную b не сохраняется картинка? Как сделать что бы сохранялась
Не сохраняется по тому что и не должна. Читай MSDN там написано, что делает эта функция. Она сохраняет текущий какдр в файл. И в качестве параметра принимает строку типа PAnsiChar с именем файла.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 25.12.2016, 17:29   #9
Legeardo
Пользователь
 
Регистрация: 04.10.2016
Сообщений: 76
По умолчанию

А как сделать что бы сохраняло в переменную?
Legeardo вне форума Ответить с цитированием
Старый 25.12.2016, 18:11   #10
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Я вам ссылку приводил Повторю ещё раз http://basicsprog.ucoz.ru/publ/6-1-0-28
Собственно функция сохранения.
Код:
//с помощью этой функции будем грабить изображение
function TForm1.CaptureBitmap: HResult;
var
  bSize: integer;
  pVideoHeader: TVideoInfoHeader;
  MediaType: TAMMediaType;
  BitmapInfo: TBitmapInfo;
  Buffer: Pointer;
  tmp: array of byte;
  Bitmap: TBitmap;
  JpegIm: TJpegImage;
begin
  // Результат по умолчанию
  Result := E_FAIL;

  // Если  отсутствует интерфейс фильтра перехвата изображения,
  // то завершаем работу
  if FSampleGrabber = NIL then EXIT;

  // Получаем размер кадра
    Result := FSampleGrabber.GetCurrentBuffer(bSize, NIL);
    if (bSize <= 0) or FAILED(Result) then EXIT;
  // Создаем изображение
  Bitmap := TBitmap.Create;
  try
  //обнуляем память
  ZeroMemory(@MediaType, sizeof(TAMMediaType));
  // Получаем тип медиа потока на входе у фильтра перехвата
  Result := FSampleGrabber.GetConnectedMediaType(MediaType);
  if FAILED(Result) then EXIT;

    // Копируем заголовок изображения
    pVideoHeader := TVideoInfoHeader(MediaType.pbFormat^);
    ZeroMemory(@BitmapInfo, sizeof(TBitmapInfo));
    CopyMemory(@BitmapInfo.bmiHeader, @pVideoHeader.bmiHeader, sizeof(TBITMAPINFOHEADER));

    Buffer := NIL;

    // Создаем побитовое изображение
    Bitmap.Handle := CreateDIBSection(0, BitmapInfo, DIB_RGB_COLORS, Buffer, 0, 0);

    // Выделяем память во временном массиве
    SetLength(tmp, bSize);

    try
      // Читаем изображение из медиа потока во временный буфер
      FSampleGrabber.GetCurrentBuffer(bSize, @tmp[0]);

      // Копируем данные из временного буфера в наше изображение
      CopyMemory(Buffer, @tmp[0], MediaType.lSampleSize);

      //если необходимо сохранить изображение в bmp файле
      //Bitmap.SaveToFile('Имя файла.bmp');

      // Конвертируем изображение в Jpeg
      //создаем объект JpegImage
      JpegIm := TJpegImage.Create;
      //устанавливаем связь с объектом Bitmap
      JpegIm.Assign(Bitmap);
      //задаем степень сжатия
      JpegIm.CompressionQuality := 30;
      //сжимаем
      JpegIm.Compress;
      //сохраняем в файл
      FileName:=Edit7.Text;
      JpegIm.SaveToFile(FileName);

    except

      // В случае сбоя возвращаем ошибочный результат
      Result := E_FAIL;
    end;
  finally
    // Освобождаем память
    SetLength(tmp, 0);
    Bitmap.Free;
    JpegIm.Free;
  end;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хочу стать делфи программистом подскажите в каком порядке что изучать(видеокурсы,книги и тд) дочитываю книгу Фленова Библия Делфи Алиби Общие вопросы Delphi 20 02.12.2016 10:19
Использование GDI+ в делфи 7. Необходимо через GDI+ в делфи 7 получить из файла формата jpg файл формата bmp DenIvan Компоненты Delphi 7 27.02.2015 11:31
Бросок к горизонту(паскаль+-делфи.(может ли кто помочь сделать с Паскаля АВС на Делфи?) extrimal Помощь студентам 8 24.03.2013 23:51
Щелчек, вебкамера, снимок в репорт и на печать Konung21 Общие вопросы Delphi 4 03.07.2010 17:12
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? Mclaren Помощь студентам 2 27.04.2009 22:37