Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Prikazivanje JPEG slike iz BYTE[]

[es] :: C/C++ programiranje :: Prikazivanje JPEG slike iz BYTE[]

[ Pregleda: 2045 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Rongon

Član broj: 61734
Poruke: 55
*.dynamic.sbb.rs.



+1 Profil

icon Prikazivanje JPEG slike iz BYTE[]07.09.2010. u 15:48 - pre 165 meseci
Naime, imam ovakav problem:
Imam niz bajtova, u kome je JPEG slika, i velicinu te slike u bajtovima, i ja to zelim da prikazem u prozoru moje win32 aplikacije
Code:
BYTE userImage[MAX];
int userImageSize;

Pokusao sam ovako:
Code:
HWND iUserImage;
//kreiram staticku kontrolu preko win32 api-ja, na koju kasnije iscrtavam
iUserImage = CreateWindow(L"Static", NULL, WS_CHILD | WS_VISIBLE | SS_BITMAP | WS_BORDER,408,20,242,322,hwnd,(HMENU)ID_I_SLIKA,g_hInst,0);
...
...
//i onda u nekoj funkciji, kada zelim da ucitam jpg
BITMAPINFO bmpInfo;
ZeroMemory(&bmpInfo, sizeof(bmpInfo));
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = 242;
bmpInfo.bmiHeader.biHeight = 322;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biBitCount = 0;
bmpInfo.bmiHeader.biCompression = BI_JPEG;
bmpInfo.bmiHeader.biSizeImage = userImageSize;
bmpInfo.bmiHeader.biXPelsPerMeter = 0;
bmpInfo.bmiHeader.biYPelsPerMeter = 0;
bmpInfo.bmiHeader.biClrUsed = 0;
bmpInfo.bmiHeader.biClrImportant = 0;
StretchDIBits(GetWindowDC(iUserImage), 0, 0, 242, 322, 0, 0, 242, 322, userImage, &bmpInfo, 0, 0);

Ovo jednostavno popuni celu sliku (staticku kontrolu iUserImage) crnom bojom. Kakvo delotvorno resenje mi predlazete?
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: Prikazivanje JPEG slike iz BYTE[]07.09.2010. u 15:54 - pre 165 meseci
Da li je u tom nizu bajtova dekompresovan JPG ili si samo otvorio neki jpg fajl i smestio ga u niz ?

Viva lollapalooza
 
Odgovor na temu

Rongon

Član broj: 61734
Poruke: 55
*.dynamic.sbb.rs.



+1 Profil

icon Re: Prikazivanje JPEG slike iz BYTE[]07.09.2010. u 16:36 - pre 165 meseci
Verovatno je kompresovan JPG, jer je MAX u userImage[MAX] jednako 7700.
Radi se o tome da pokusavam da prikazem sliku sa elektronske licne karte.
 
Odgovor na temu

VladimirCDT
VladimirCDT
programer
Beograd

Član broj: 220281
Poruke: 45
*.pstech.rs.



+2 Profil

icon Re: Prikazivanje JPEG slike iz BYTE[]07.09.2010. u 16:58 - pre 165 meseci
Pre, sada vec dosta godina, ja sam se nesto zezao sa tim jpegom.

Mislim da ces prvo morati da dekompresujes taj jpeg u bitmap, pa tek onda da iscrtavas. Ne znam da li sada ima neka gotivnija podrska za dekompresiju jpeg-a, onomad kada sam ja radio, napatio sam se sa onom jpeg bibliotekom.
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Prikazivanje JPEG slike iz BYTE[]07.09.2010. u 18:19 - pre 165 meseci
Sigurno da postoji klasa/kontrola sa podrškom za JPEG. Ne verujem da mora da piše sopstvenu dekompresiju u bitmapu, ali moguće da ova klasa koju koristi to ne podržava. Ne bavim se Win32. Google daje ovo kao rezultat http://www.arstdesign.com/articles/picloader.html za alternativu.


Zapravo, pogledaj ovde: http://msdn.microsoft.com/en-us/library/dd145121(VS.85).aspx

Citat:
If the biCompression member of BITMAPINFOHEADER is BI_JPEG or BI_PNG, lpBits points to a buffer containing a JPEG or PNG image, respectively. The biSizeImage member of the BITMAPINFOHEADER structure specifies the size of the buffer. The iUsage parameter must be set to DIB_RGB_COLORS. The dwRop parameter must be set to SRCCOPY.


Stara dobra navika da se pročita man stranica. Probaj sa:
StretchDIBits(GetWindowDC(iUserImage), 0, 0, 242, 322, 0, 0, 242, 322, userImage, &bmpInfo, DIB_RGB_COLORS, SRCCOPY);
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Prikazivanje JPEG slike iz BYTE[]07.09.2010. u 18:37 - pre 165 meseci
CxImage biblioteka sa code projecta ima i mogućnost čitanja slike iz memorije, pored čitanja sa hard diska.
 
Odgovor na temu

Rongon

Član broj: 61734
Poruke: 55
*.dynamic.sbb.rs.



+1 Profil

icon Re: Prikazivanje JPEG slike iz BYTE[]07.09.2010. u 23:55 - pre 165 meseci
@Mihajlo Cvetanović
Hvala ti, proradilo je preko CxImage. Jeste da je malo overkill (posto cela biblioteka ima pregrst opcija za sve standardne formate), pa je exe skocio sa 60KB na 900KB, ali radi...
Code:
CxImage* pCxSlika;
...
pCxSlika = new CxImage(userImage, userImageSize, CXIMAGE_FORMAT_JPG);
SendMessage(iUserImage, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)pCxSlika->MakeBitmap());
delete pCxSlika;
Pokusacu sada da izdvojim samo deo biblioteke koji radi sa JPG slikama :)
P.S. Za one koje zanima, dimenzije slike na elektronskoj licnoj karti su 240x320px.

Izmena:
U fajlu "ximacfg.h" u glavnom projektu "CxImage" sam jedino ostavio:
#define CXIMAGE_SUPPORT_JPG 1
, a sve ostale formate sam stavio na 0. Mnogo manji fajl se kreira, exe je sada 100KB, sto je super. :) :)

[Ovu poruku je menjao Rongon dana 08.09.2010. u 01:16 GMT+1]
 
Odgovor na temu

[es] :: C/C++ programiranje :: Prikazivanje JPEG slike iz BYTE[]

[ Pregleda: 2045 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.