Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GDI+ Загрузить bmp, яндекс мало что дает 
:(
    Опции темы
The Thing
Дата 6.7.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Привет! Никогда не ииспользовал GDI+, всю жизнь работал только с АПИ.. и вот - понадобился!
Помогите пожалуйста примерчиком загрузки картинки (разных формато.. какие сможете дать) с помощью GDI+.
А лучше всего, если есть урлка с описанием или книжкой про GDI+ (если не будет.. просто GDI).. что бы я почитал!

У кого есть примерчики скиньте.. плиз.. 
  

Это сообщение отредактировал(а) The Thing - 6.7.2006, 12:11


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 6.7.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



пардон... разве ето ни есть работа с GDI? Так а чем она отличается от GDI+? Что-то я запутался.. помогите.. объясните:
1. С чем я работал?
2. Что такое GDI?
3. Чем отличается GDI+ от GDI?

Код

CDC cdc;
        CBitmap bitmap;
        cdc.CreateCompatibleDC(&dc);
        bitmap.CreateCompatibleBitmap(&dc,    lengthdraw, heigth);

        cdc.SelectObject(bitmap);
        cdc.BitBlt(0, 0, lengthdraw, heigth, &cdc, 0, 0, BLACKNESS);

        ////////////////////////////////////////////////////////////        
        //Draw PreObod
        CPen penPreObod, *oldPen;
        penPreObod.CreatePen(PS_SOLID, FOTO_OBODOK, RGB(255, 255, 255));
        oldPen = cdc.SelectObject(&penPreObod);
 


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
vvpC
Дата 6.7.2006, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 20.5.2006
Где: Москва

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



Цитата(The Thing @  6.7.2006,  12:32 Найти цитируемый пост)
1. С чем я работал?

История об этом умалчивает smile, а приведенный тобой пример это GDI обернутый в MFC
Цитата(The Thing @  6.7.2006,  12:32 Найти цитируемый пост)
2. Что такое GDI?

графический интерфейс устройства
Цитата(The Thing @  6.7.2006,  12:32 Найти цитируемый пост)
3. Чем отличается GDI+ от GDI?

Хотя бы тем что позволяет делать то что не позволяет делать GDI - например загружать и сохранять изображения во многих популярных форматах, а не только в bmp..
Кстати еще можно в MSDN заглянуть:
Код

#define UNICODE
#include <windows.h>
#include <gdiplus.h>
using namespace Gdiplus;

VOID OnPaint(HDC hdc)
{
   Graphics graphics(hdc);
   Pen      pen(Color(255, 0, 0, 255));
   graphics.DrawLine(&pen, 0, 0, 200, 100);
}

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow)
{
   HWND                hWnd;
   MSG                 msg;
   WNDCLASS            wndClass;
   GdiplusStartupInput gdiplusStartupInput;
   ULONG_PTR           gdiplusToken;
   
   // Initialize GDI+.
   GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
   
   wndClass.style          = CS_HREDRAW | CS_VREDRAW;
   wndClass.lpfnWndProc    = WndProc;
   wndClass.cbClsExtra     = 0;
   wndClass.cbWndExtra     = 0;
   wndClass.hInstance      = hInstance;
   wndClass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
   wndClass.hCursor        = LoadCursor(NULL, IDC_ARROW);
   wndClass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);
   wndClass.lpszMenuName   = NULL;
   wndClass.lpszClassName  = TEXT("GettingStarted");
   
   RegisterClass(&wndClass);
   
   hWnd = CreateWindow(
      TEXT("GettingStarted"),   // window class name
      TEXT("Getting Started"),  // window caption
      WS_OVERLAPPEDWINDOW,      // window style
      CW_USEDEFAULT,            // initial x position
      CW_USEDEFAULT,            // initial y position
      CW_USEDEFAULT,            // initial x size
      CW_USEDEFAULT,            // initial y size
      NULL,                     // parent window handle
      NULL,                     // window menu handle
      hInstance,                // program instance handle
      NULL);                    // creation parameters
      
   ShowWindow(hWnd, iCmdShow);
   UpdateWindow(hWnd);
   
   while(GetMessage(&msg, NULL, 0, 0))
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }
   
   GdiplusShutdown(gdiplusToken);
   return msg.wParam;
}  // WinMain

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, 
   WPARAM wParam, LPARAM lParam)
{
   HDC          hdc;
   PAINTSTRUCT  ps;
   
   switch(message)
   {
   case WM_PAINT:
      hdc = BeginPaint(hWnd, &ps);
      OnPaint(hdc);
      EndPaint(hWnd, &ps);
      return 0;
   case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
   default:
      return DefWindowProc(hWnd, message, wParam, lParam);
   }
}
  

Это сообщение отредактировал(а) vvpC - 6.7.2006, 12:55
PM MAIL WWW   Вверх
The Thing
Дата 6.7.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что-то у меня этой библиотеки не находит...smile  gdiplus.h

Стандартный набор: CPen, CBrush, CFont... это же GDI?

Добавлено @ 13:04 
Да, я использую Вижуал 6. он ГДИ+ юзает? 

Это сообщение отредактировал(а) The Thing - 6.7.2006, 13:03


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
vvpC
Дата 6.7.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 20.5.2006
Где: Москва

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



Цитата(The Thing @  6.7.2006,  13:01 Найти цитируемый пост)
Стандартный набор: CPen, CBrush, CFont... это же GDI?

HPEN, HBRUSH, HFONT - это GDI. А CPen, CBrush, CFont..это классы-обертки из MFC Ну можно сказать что это тоже GDI.
Цитата(The Thing @  6.7.2006,  13:01 Найти цитируемый пост)
Да, я использую Вижуал 6. он ГДИ+ юзает? 

в стандартном виде конечно нет. Можно попытаться руцами подключить GDI+,  но я бы поставил студию от 2003 или выше.   

Это сообщение отредактировал(а) vvpC - 6.7.2006, 13:27
PM MAIL WWW   Вверх
The Thing
Дата 6.7.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vvpC @ 6.7.2006,  13:26)
Цитата(The Thing @  6.7.2006,  13:01 Найти цитируемый пост)
Стандартный набор: CPen, CBrush, CFont... это же GDI?

HPEN, HBRUSH, HFONT - это GDI. А CPen, CBrush, CFont..это классы-обертки из MFC Ну можно сказать что это тоже GDI.
Цитата(The Thing @  6.7.2006,  13:01 Найти цитируемый пост)
Да, я использую Вижуал 6. он ГДИ+ юзает? 

в стандартном виде конечно нет. Можно попытаться руцами подключить GDI+,  но я бы поставил студию от 2003 или выше.

Съездил в центер и нарезал студию! smile

Отлично! Как раз с этого я и начинал! Я думал - то просто АПИшный функции для работы с графикой! smile 


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
vvpC
Дата 6.7.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 20.5.2006
Где: Москва

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



Цитата(The Thing @  6.7.2006,  17:14 Найти цитируемый пост)
Я думал - то просто АПИшный функции для работы с графикой!
Так это и есть апишные функции работы с графикой. Только этот API - Windows XP API. более ранние винды надо конкретно апгрейдить.
 
PM MAIL WWW   Вверх
The Thing
Дата 6.7.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня в задании стоит загрузить картинку с помощью GDI+. Я могу ее загрузить таким способом?
Если нет, Приведите... плз!.. правильный!!!..

Код

    hBitmapPole = (HBITMAP)::LoadImage(NULL, "pic.bmp", IMAGE_BITMAP, 0,0,
        LR_DEFAULTCOLOR | LR_DEFAULTSIZE | LR_LOADFROMFILE);

    GetObject(hBitmapPole , sizeof(m_bitmapPole), &m_bitmapPole);
    
    if(!hBitmapPole)
        return false;
 


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
Earnest
Дата 7.7.2006, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Есть класс CImage, у него функция LoadXXX - загружает кучу форматов.
А то, что ты написал, это "просто" GDI, но тоже правильно (вроде). 


--------------------
...
PM   Вверх
vvpC
Дата 7.7.2006, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 20.5.2006
Где: Москва

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



Цитата(The Thing @  6.7.2006,  18:36 Найти цитируемый пост)
У меня в задании стоит загрузить картинку с помощью GDI+. 
 Если нужен именно GDI+ то твой пример преподу не понравится. Да и использование класса CImage, по этой же причине, тоже не подойдет..
глянь MSDN там все понятно и даны подробные примеры. Вот один из них:
Код

Image image(L"Grapes.jpg");
graphics.DrawImage(&image, 60, 10);

Разве сложно? smile
 
PM MAIL WWW   Вверх
The Thing
Дата 7.7.2006, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем спасиба!

Нашел и прочитал доку по GDI+ (rsdn)... как с ней работать... Жаль, что SDK Documentation нет.. надо бы достать...

Все вышеперечисленные вопросы отпали.. кроме одного

Разумеется, выигрывая в качестве, проигрываешь в скорости, поэтому при использовании режима с наивысшим качеством InterpolationModeHighQualityBicubic медленные компьютеры могут выводить изображения больших размеров в течение нескольких секунд! Но только этот метод способен адекватно отображать картинку при уменьшении ее до 25 процентов (и менее) от оригинала. Этот режим очень поможет различным автоматическим генераторам иконок (thumbnail) изображений в ASP.NET.

Пытаюсь найти как воспользоваться InterpolationModeHighQualityBicubic.

Кто знает помогите!

Добавлено @ 09:55 
Метод нашел.. Graphics::SetInterpolationMode(InterpolationModeHighQualityBicubic); 


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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