Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
27th
Дек
Работа с вебкамерой в Делфи
Posted by obzor under Delphi
Мне нужно по нажатию кнопки сохранять картинки с вебки в Tmemorystream:
1. нужно проверить на наличие вебки
2. если вебок 2 то выбрать первую. Выбрать именно надо программно что бы не тревожить лишний раз пользователя
3. делаем фото сохраняем в Tmemorystream а далее сохраняем в файл. Мне нужно именно эта конструкция. Сохранять сразу в файл не надо.
4. отключаемся
С какими компонентами можно сделать то что я сказал выше?
Собственно функция сохранения.
//с помощью этой функции будем грабить изображение
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;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)