На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Вывод изображения в static control, консультация
    Нужно вывести bmp в static. Делаю с помощью STM_SETIMAGE, но если изображение больше чем static , то оно не рисуется полностью. Так вот как ужать (или растянуть) картинку на весь статик?
      Используй StretchBlt с режимом HALFTONE
      char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
      for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


      user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
        И что это даст?
          Профит это даст.
          char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
          for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


          user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
            а пример кода или ссылку можно?
              помог SS_REALSIZECONTROL
                Цитата www @
                а пример кода или ссылку можно?

                ПОИСК: StretchBlt
                Например, Поместить изображение в CStatic

                SS_REALSIZECONTROL не сглаживает изображение при масштабировании
                char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                  Вот вернулся опять...

                  Есть такой вопрос: нужно нарисовать в памяти изображение, а затем вывести его в static. Делаю так, но на выходе получаю черный квадрат. Где я не прав?

                  ExpandedWrap disabled
                    bool  DrawObject::Draw(HWND hWnd, ImageObject &hImage)
                    {
                        RECT rct={0};
                        GetClientRect(hWnd,&rct);
                     
                        HDC dc=GetDC(hWnd);
                        HDC dest=CreateCompatibleDC(dc);
                     
                        DrawScale(dest,rct,maxY,maxC);
                        ImageObject *obj=DrawGisto(dest,rct,maxY,maxC,vector,N);
                     
                        DrawImage(hWnd,rct.right-rct.left,rct.bottom-rct.top,*obj);
                     
                        ReleaseDC(hWnd,dc);
                        return true;
                    }
                     
                    bool DrawObject::DrawImage(HWND hWnd,int wDest,int hDest,ImageObject &hImage)
                    {
                        HBITMAP hBitmap=hImage.GetImageHandle();
                     
                        if(hBitmap)
                            {
                            hBitmap=(HBITMAP)SendMessage(hWnd,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hBitmap);
                                    return true;
                            }
                     
                        return false;
                    }
                     
                    bool DrawObject::DrawScale(HDC &hdcDst,RECT rct,int maxY,int maxC)
                    {
                        HPEN hAxisPen=CreatePen(PS_SOLID,2,RGB(0x00,0x00,0xff));
                        HGDIOBJ hOld=SelectObject(hdcDst,hAxisPen);
                     
                        MoveToEx(hdcDst,rct.left+10,rct.top+10,NULL);
                        LineTo(hdcDst,rct.left+10,rct.bottom-10);
                        LineTo(hdcDst,rct.right-10,rct.bottom-10);
                     
                        DeleteObject(hAxisPen);
                        return true;
                    }
                    CreateCompatibleBitmap не хватает ну и SelectObject...
                    Сообщение отредактировано: ElcnU -
                    "Бубен Team Edition for Developers"
                    ULLib | ULj2me
                      дописал вот так, но результата нет
                      ExpandedWrap disabled
                        bool  DrawObject::Draw(HWND hWnd, ImageObject &hImage)
                        {
                            RECT rct={0};
                            GetClientRect(hWnd,&rct);
                         
                            HDC dc=GetDC(hWnd);
                            HDC dest=CreateCompatibleDC(dc);
                            HBITMAP hCompatibleBitmap=CreateCompatibleBitmap(dc,rct.right-rct.left,rct.bottom-rct.top);
                            SelectObject(dest,hCompatibleBitmap);
                         
                            DrawScale(dest,rct,maxY,maxC);
                            ImageObject *obj=DrawGisto(dest,rct,maxY,maxC,vector,N);
                         
                            DrawImage(hWnd,rct.right-rct.left,rct.bottom-rct.top,*obj);
                         
                            ReleaseDC(hWnd,dc);
                            return true;
                        }
                        Дык у тебя DrawImage() посылает SendMessage, а не рисует на hCompatibleBitmap, а потом типа BitBlt на DC статика.
                        Вот от этого у тебя ничего и нету
                        Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал"("Yоur bunnу wrоte")
                          еще бы быть уверенным как получается изображение из контекста в DrawGisto.... там есть SelectObject, чтоб вернуть заполненый битмап?
                          Сообщение отредактировано: ElcnU -
                          "Бубен Team Edition for Developers"
                          ULLib | ULj2me
                            2Dem_max
                            а как нарисовать в hCompatibleBitmap? нужно в памяти сформировать изображение, а потом вывести его в static с помощью STM_SETIMAGE.

                            2ElcnU все выглядит так

                            ExpandedWrap disabled
                              bool DrawObject::DrawImage(HWND hWnd,int wDest,int hDest,ImageObject &hImage)
                              {
                                  HBITMAP hBitmap=hImage.GetImageHandle();
                               
                                  if(hBitmap)
                                  {
                                      hBitmap=(HBITMAP)SendMessage(hWnd,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hBitmap);
                                  }
                               
                                  return false;
                              }
                               
                               
                              bool DrawObject::DrawScale(HDC &hdcDst,RECT rct,int maxY,int maxC)
                              {
                                  HPEN hAxisPen=CreatePen(PS_SOLID,2,RGB(0x00,0x00,0xff));
                                  HGDIOBJ hOld=SelectObject(hdcDst,hAxisPen);
                               
                                  MoveToEx(hdcDst,rct.left+10,rct.top+10,NULL);
                                  LineTo(hdcDst,rct.left+10,rct.bottom-10);
                                  LineTo(hdcDst,rct.right-10,rct.bottom-10);
                               
                                  DeleteObject(hAxisPen);
                               
                                  return true;
                              }
                               
                              ImageObject* DrawObject::DrawGisto(HDC &dest,RECT rct,int maxY, int maxC,int *vector,int N)
                              {  
                                  double xStep=(rct.right-rct.left-20)/256;
                                  double yStep=(rct.bottom-rct.top-20)/maxC;
                               
                                  HBITMAP hCompatibleBitmap=CreateCompatibleBitmap(dest,rct.right-rct.left,rct.bottom-rct.top);
                                  SelectObject(dest,hCompatibleBitmap);
                               
                                  HPEN hGistoPen=CreatePen(PS_SOLID,1,RGB(0xff,0x00,0x00));
                                  HGDIOBJ hOld=SelectObject(dest,hGistoPen);
                               
                                  for(int i=0;i<N;i++)
                                  {
                                      MoveToEx(dest,xStep*i,rct.bottom-10,NULL);
                                      LineTo(dest,xStep*i,yStep*vector[i]);
                                  }
                               
                                  SelectObject(dest,hOld);
                                  DeleteObject(hGistoPen);
                               
                                  return new ImageObject(hCompatibleBitmap);
                              }  
                               
                               
                              bool  DrawObject::DrawGistogram(HWND hWnd, ImageObject &hImage)
                              {
                                  RECT rct={0};
                                  GetClientRect(hWnd,&rct);
                                  HDC dc=GetDC(hWnd);
                                  hImage.CalculateGistogramm(dc);
                               
                                  int *vector=hImage.GetGistoVector();
                               
                                  int maxY=0,maxC=0;
                                  int N=hImage.GetGistoCount();
                               
                                  for(int i=0;i<N;i++)
                                  {
                                      if(vector[i/*яркость*/]>maxC)
                                          maxC=vector[i];
                                      if(i>maxY && i!=0)
                                          maxY=i;
                                  }
                               
                                  HDC dest=CreateCompatibleDC(dc);
                                  DrawScale(dest,rct,maxY,maxC);
                                  ImageObject *obj=DrawGisto(dest,rct,maxY,maxC,vector,N);
                                  DrawImage(hWnd,rct.right-rct.left,rct.bottom-rct.top,*obj);
                               
                                  ReleaseDC(hWnd,dc);
                               
                                  return true;
                              }
                            Сообщение отредактировано: www -
                              может наведет на мысль Разделить HBITMAP на куски (сообщение #1834452)

                              стоит обратить внимание, что битмап отвязывался от контекста перед возвратом из функции
                              "Бубен Team Edition for Developers"
                              ULLib | ULj2me
                                Сам Bjarne Stroustrup дал ответ: "Так перед тем как битмап HBITMAP запиcывать в файл .bmp его надо удалить из контекста памяти."
                                GDI

                                Вызов DeleteDC(dest); перед return new ImageObject(hCompatibleBitmap); помог.

                                :)
                                Сообщение отредактировано: www -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1238 ]   [ 15 queries used ]   [ Generated: 20.08.19, 12:01 GMT ]