Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GetEncoderClsid - работает не более 85 раз? img->Save("Путь", &imgClsid, &encoderPar 
:(
    Опции темы
malor
  Дата 29.6.2011, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Сохраняю скриншот экрана с периодом полсекунды в JPG-файл. После 85-86 раз скрин уже не создавался - функция 
img->Save(L"Z:\\ImageDesktop.jpeg", &imgClsid, &encoderParams);
возвращала значение 2.
Почему ?
Скрины делал по таймеру с интервалами 0.5 сек, 1 сек, 2 сек.

Код
// http://msdn.microsoft.com/en-us/library/ms533843.aspx
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
    UINT  num = 0;          // number of image encoders
    UINT  size = 0;         // size of the image encoder array in bytes

    ImageCodecInfo* pImageCodecInfo = NULL;

    GetImageEncodersSize(&num, &size);
    if(size == 0)
      return -1;  // Failure

    pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
    if(pImageCodecInfo == NULL)
      return -1;  // Failure

    GetImageEncoders(num, size, pImageCodecInfo);    

    for(UINT j = 0; j < num; ++j)
    {
      if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
      {
         *pClsid = pImageCodecInfo[j].Clsid;
         free(pImageCodecInfo);
         return j;  // Success
      }    
    }

    free(pImageCodecInfo);
    return -1;  // Failure
}

// Сохраннение в файл на диске в формате JPG
void SaveScreenShotJPG()
{
    static int GoodWork = 0;

    ULONG_PTR gdiplusToken;
    GdiplusStartupInput gdiplusStartupInput;
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

    int Width, Height;
    HDC scrdc, memdc;
    HBITMAP membit;
    scrdc  = GetDC(0);
    Height = GetSystemMetrics(SM_CYSCREEN);
    Width  = GetSystemMetrics(SM_CXSCREEN);
    memdc  = CreateCompatibleDC(scrdc);
    membit = CreateCompatibleBitmap(scrdc, Width, Height);
    SelectObject(memdc, membit);
    BitBlt(memdc, 0, 0, Width, Height, scrdc, 0, 0, SRCCOPY);

    Bitmap *bmp = new Bitmap(membit, NULL);
    Image  *img = bmp->GetThumbnailImage(Width, Height);
    CLSID imgClsid;
    EncoderParameters encoderParams;
    int quality = 65;
    encoderParams.Count = 1;
    encoderParams.Parameter[0].Guid           = EncoderQuality;
    encoderParams.Parameter[0].Type           = 4;
    encoderParams.Parameter[0].NumberOfValues = 1;
    encoderParams.Parameter[0].Value          = &quality;
    GetEncoderClsid(L"image/jpeg", &imgClsid);
    int status;
    status = img->Save(L"Z:\\ImageDesktop.jpeg", &imgClsid, &encoderParams);
    if (!status) 
        GoodWork = GoodWork + 1;
    delete bmp;
    delete img;
}


user posted image

P.S. С форматом BMP аналогичная ситуация.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0370 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.