[ Príspevkov: 3 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20 | 20
Bydlisko: Krásno n/Ky...
NapísalOffline : 14.10.2010 1:24 | Vykreslenie Bitmapy do PictureBox-u

Zdravim,

zasekol som sa na jednom probleme, s ktorym si neviem dat rady a chcel by som Vas poprosim o rady. Moja aplikacia v podstate zachytava obraz z kamery a rendruje ho na obrazovku do PictureBox-u (o to sa stara API vyrobcu kamery, neviem ako tie metody vo vnutri funguju). Ja potrebujem zachyteni obraz zanalyzovat a po analyze ho vykreslit do dalsieho PictureBox-u. GUI mam pisane v C#, ale vsetko ostatne riesim v C++ pokial mozno s pouzitim WIN32 API. Skusim Vam podrobne popisat dany problem ktory mam.

HANDLE PictureBoxu predam z C# do C++
Kód:
adapter.Init(0, analyzeBox.Handle.ToInt32());


Kód:
int Device::Init(int phf, int handleWindow)
{
HWND analyzeWindowHandle = (HWND) handleWindow;
...
}



Takze v metode Analyze nacitam data z pamate, prebehnem to dakym tym algoritmom a chcem ich vykrelist do pripraveneho PictureBoxu. A to je ten problem. Neviem ako na to. Z debugu sa zda ze cez CreateBitmap sa Bitmapa v pohode vytvori, problem je, ze neviem ako ju zobrazit do PictureBox-u s vyuzitim HWND. Momentalne to skusam pomocou SendMessage, ale to mi tiez nefunguje.

Kód:
int Device::Analyze()
{
   int width, height, bits, pitch, tempBitmapID;
   int rValue;
   char* tempBitmap = (char*) malloc((this->width * ((this->bits + 1) / 8) + 0) * this->height);

   if(rValue = is_CopyImageMem(*this->cameraHandlePointer, imgMemory, imgMemoryID, tempBitmap) != IS_SUCCESS)
      return rValue;

   if(is_InquireImageMem (*this->cameraHandlePointer, imgMemory, imgMemoryID, &width ,&height, &bits, &pitch) != IS_SUCCESS)
      return rValue;
   else
   {
      ...

      HBITMAP hBmp = CreateBitmap(width,height,1,bits,tempBitmap);

      LRESULT lr = SendMessage( this->analyzeWindowHandle, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hBmp);
      
   }

   return 0;
}


Vopred dakujem za napady, rady, tipy, triky, alebo myslienky


Offline

Skúsený užívateľ
Skúsený užívateľ
Vykreslenie Bitmapy do PictureBox-u

Registrovaný: 11.01.09
Prihlásený: 24.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 14.10.2010 13:30 | Vykreslenie Bitmapy do PictureBox-u

Skús sa pozrieť >> sem << , možno nájdeš riešenie.

// nemám po ruke windows, takže s kódom ti môžem pomôcť najskôr v piatok večer


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 25.12.06
Prihlásený: 01.03.13
Príspevky: 239
Témy: 20 | 20
Bydlisko: Krásno n/Ky...
Napísal autor témyOffline : 15.10.2010 9:28 | Vykreslenie Bitmapy do PictureBox-u

Kód:
int Device::Analyze()
{
      int width, height, bits, pitch, tempBitmapID;
      int rValue;
      char* tempBitmap = (char*) malloc((this->width * ((this->bits + 1) / 8) + 0) * this->height);

      if(rValue = is_CopyImageMem(*this->cameraHandlePointer, imgMemory, imgMemoryID, tempBitmap) != IS_SUCCESS)
            return rValue;

      if(is_InquireImageMem (*this->cameraHandlePointer, imgMemory, imgMemoryID, &width ,&height, &bits, &pitch) != IS_SUCCESS)
            return rValue;
      else
      {
            ...
             
            BITMAPINFO Bmi={0};
            Bmi.bmiHeader.biSize      = sizeof(BITMAPINFOHEADER);
            Bmi.bmiHeader.biWidth      =  width;
            Bmi.bmiHeader.biHeight      = height;
            Bmi.bmiHeader.biPlanes      = 1;
            Bmi.bmiHeader.biBitCount    = bits;
            Bmi.bmiHeader.biCompression  = BI_RGB;
            Bmi.bmiHeader.biSizeImage    = width*height*bits/8;

            HDC hDc = GetDC(this->analyzeWindowHandle);
            HDC chDc = CreateCompatibleDC(hDc);
            HBITMAP hBmp = CreateCompatibleBitmap(hDc, width, height);
            if(SetDIBits(chDc, hBmp, 0, height, tempBitmap, &Bmi, DIB_RGB_COLORS) == ERROR_INVALID_PARAMETER)
                  return 0;
            BOOL ok = BitBlt(hDc,0,0,width,height,chDc,0,0,SRCCOPY);

            DWORD d = GetLastError();
      }
      return 0;
}


V PictureBox-e sa mi nezobrazi nic. Pritom GetDC, CreateCompatibleDC aj HBITMAP mi vrati normalne handle. SetDIBits mi vrati 576 co je vlastne height a BitBlt mi vrati true... Tak troska nerozumiem, kde je problem?

// pridané po 14 hodinách 9 minútach od posledného príspevku

Vyriesene

Kód:
int Device::Analyze()
{
   int width, height, bits, pitch, tempBitmapID;
   int rValue;
   char* tempBitmap = (char*) malloc((this->width * ((this->bits + 1) / 8) + 0) * this->height);

   if(rValue = is_CopyImageMem(*this->cameraHandlePointer, imgMemory, imgMemoryID, tempBitmap) != IS_SUCCESS)
      return rValue;

   if(is_InquireImageMem (*this->cameraHandlePointer, imgMemory, imgMemoryID, &width ,&height, &bits, &pitch) != IS_SUCCESS)
      return rValue;
   else
   {
      ...
      
      /**/
      BITMAPINFO Bmi={0};
      Bmi.bmiHeader.biSize      = sizeof(BITMAPINFOHEADER);
      Bmi.bmiHeader.biWidth      =  width;
      Bmi.bmiHeader.biHeight      = height;
      Bmi.bmiHeader.biPlanes      = 1;
      Bmi.bmiHeader.biBitCount    = bits;
      Bmi.bmiHeader.biCompression  = BI_RGB;
      Bmi.bmiHeader.biSizeImage    = width*height*bits/8;

      HDC hDc = GetDC(this->analyzeWindowHandle);
      HDC chDc = CreateCompatibleDC(hDc);
      HBITMAP hBmp = CreateCompatibleBitmap(hDc, width, height);
      int res = (int) SelectObject(chDc,hBmp);

      if(SetDIBits(chDc, hBmp, 0, height, tempBitmap, &Bmi, DIB_RGB_COLORS) == ERROR_INVALID_PARAMETER)
         return 0;

      //BitBlt(hDc,0,0,width,height,chDc,0,0,SRCCOPY);
      StretchBlt(hDc,0,0,438,329,chDc,0,0,width,height,SRCCOPY);
   }
   return 0;
}


Vdaka za pomoc


 [ Príspevkov: 3 ] 


Vykreslenie Bitmapy do PictureBox-u



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

plynulé vyfarbenie bitmapy

v JavaScript, VBScript, Ajax

11

977

13.08.2009 19:56

pilná lama glama

V tomto fóre nie sú ďalšie neprečítané témy.

Prevod obrázka (bitmapy) do kriviek

v Grafické programy

1

3496

17.04.2009 15:05

Dudko

V tomto fóre nie sú ďalšie neprečítané témy.

Delphi Nahratie obrazka do bitmapy !! PLS HELP

v Delphi, Visual Basic

2

807

30.03.2009 17:49

1115Lukas

V tomto fóre nie sú ďalšie neprečítané témy.

vykreslenie vo flashi

v Ostatné

0

498

25.02.2009 23:40

jablko05

V tomto fóre nie sú ďalšie neprečítané témy.

Vykreslenie grafu z ciselnych hodnot.

v PHP, ASP

1

661

16.10.2009 15:44

rooobertek

V tomto fóre nie sú ďalšie neprečítané témy.

C++ API Vykreslenie hodnoty premennej

v Assembler, C, C++, Pascal, Java

2

347

04.03.2013 23:38

Grash

V tomto fóre nie sú ďalšie neprečítané témy.

Vykreslenie koláčového diagramu v C++

v Assembler, C, C++, Pascal, Java

2

562

15.05.2008 21:15

Marsello

V tomto fóre nie sú ďalšie neprečítané témy.

C# - vykreslenie trojuholníkov zo zadaných údajov

v Technológia .NET

3

1087

09.04.2011 18:46

walther

V tomto fóre nie sú ďalšie neprečítané témy.

Vykreslenie stránky v rôznych prehliadačoch- css problém

v HTML, XHTML, XML, CSS

2

446

31.03.2012 17:11

gogy27

V tomto fóre nie sú ďalšie neprečítané témy.

Java - načítanie JPG obrázku a jeho vykreslenie

v Assembler, C, C++, Pascal, Java

2

1183

12.04.2010 10:54

Forty-

V tomto fóre nie sú ďalšie neprečítané témy.

Ako načítať z Edit-u do Timer-u

v Delphi, Visual Basic

13

1298

29.05.2011 17:27

petercvm

V tomto fóre nie sú ďalšie neprečítané témy.

píše ´u miesto ú...

v Operačné systémy Microsoft

2

492

09.04.2013 8:47

JTB

V tomto fóre nie sú ďalšie neprečítané témy.

D.U.

v Vzdelanie, štúdium, škola

4

1665

19.09.2006 20:00

Loki.::

V tomto fóre nie sú ďalšie neprečítané témy.

U-TORRENT

v Sieťové a internetové programy

3

861

11.03.2009 16:51

f4r0

V tomto fóre nie sú ďalšie neprečítané témy.

u torrent

v Sieťové a internetové programy

1

726

11.09.2008 11:36

Gyrxiur

V tomto fóre nie sú ďalšie neprečítané témy.

U torrent

v Sieťové a internetové programy

1

944

06.04.2008 16:41

shiro



© 2005 - 2024 PCforum, edited by JanoF