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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [GDI+] jpeg to bmp 8bpp 
:(
    Опции темы
586
Дата 26.1.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Нужно конвертировать JPEG в 8-битный BMP. В результате получается 24-битный BMP. Что не так далаю?
Код
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <gdiplus.h>
#pragma comment (lib, "gdiplus.lib")
using namespace Gdiplus;

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
}

int APIENTRY _tWinMain(HINSTANCE hinst, HINSTANCE, LPTSTR, INT)
{
    CLSID clsid;
    EncoderParameters ep;
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR           gdiplusToken;


    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

    Image *jpg=new Image(L"C:\\code.jpg");
    //Bitmap bmp(L"C:\\code.bmp");
    if(GetEncoderClsid(L"image/bmp", &clsid) != -1)
    {
        long depth = 8;
        ep.Count = 1;
        ep.Parameter[0].Guid = EncoderColorDepth;
        ep.Parameter[0].NumberOfValues = 1;
        ep.Parameter[0].Type = EncoderParameterValueTypeLong;
        ep.Parameter[0].Value = &depth;
        jpg->Save(L"C:\\code.bmp", &clsid, &ep);
    }
    else MessageBeep(0);

    delete jpg;

    GdiplusShutdown(gdiplusToken);
    return 0;
}

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

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

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


 




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


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

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