O problema tip Win32 GUI

Acest forum este dedicat intrebarilor de Windows API, folosing C/C++

O problema tip Win32 GUI

Mesajde Parametru » 15 Iul 2012, 01:17

Am inteles in mare cum functioneaza si cum sa creez o interfatza bazata pe winAPI. Totusi ce nu inteleg eu este, afisarea imaginilor intrun "PictureBox" cum sar spune. Inteleg ca am nevoie de un device content, un WM_PAINT callback si apoi functia LoadBitmap(); DAR, asta merge numai cu bitmapuri. Daca as vrea sa incerc un JPEG sau PNG, nu are merge, mi se pare logic asa ca am facut niste cercetari si am ajuns la concluzia ca am nevoie de GDIplus.

Poate ca cineva sa imi dea o explicatie mai buna sau un site pe care as putea invata mai adanc despre GDI si sa manipulez pixeli? Multumesc frumos.
Avatar utilizator
Parametru
Junior
Junior
 
Mesaje: 6
Membru din: 15 Iul 2012, 00:04
Judet: Buzău

Re: O problema tip Win32 GUI

Mesajde Ovidiu Cucu » 15 Iul 2012, 08:51

Vrei sa incarci imagini din resurse sau si din fisiere? Sau amandoua? :)

Cu LoadBitmap poti incarca doar din resurse tip bitmap.
O functie ceva mai flexibila, cu care poti incarca bitmap-uri si din fisiere (bmp, ico, cur, ani), este LoadImage.
Pentru alte formate grafice (JPEG, GIFF, PNG, etc) cele de mai sus nu te ajuta insa ai o multime de obtiuni.

Cum ai zis si tu, GDI+ este una dintre ele.
Una ceva mai comoda este folosind clasa ATL/MFC CImage. Asta foloseste ea insasi GDI+ insa iti poate face viata mai usoara.
Alta obtiune mai noua este WIC (Windows Imaging Component) care, pe langa formatele "standard" (BMP, JPEG, GIF, TIFF, PNG) iti permite sa te joci si cu altele, cum ar fi formatele "raw" pe care le scot camerele digitale.
Si mai sunt, multe si marunte.

Pana una-alta, pun aici niste link-uri de unde ai putea fura cate o idee:

Daca ne spui concret si mai clar ce si cum vrei sa faci, poate vin si cu niste exemple mai apropiate de ce-ti trebuie.
Asta in mare despre cum pot incarca imagini din diverse formate. De aici si pana la "manipulat pixeli" mai avem de sapat... ;)
Avatar utilizator
Ovidiu Cucu
Fondator
Fondator
 
Mesaje: 3776
Membru din: 11 Iul 2007, 16:10
Localitate: Iasi
Judet: Iaşi

Re: O problema tip Win32 GUI

Mesajde Parametru » 15 Iul 2012, 12:00

Apreciez raspunul si informatia. Sa va dau un detaliu mai mare la ce lucrez, vine c-am asa.

http://www.youtube.com/watch?v=TpC6D_oPEK8

Acesta este un Remote Control Desktop ce il facusem acum cateva luni in VB.NET.
Ei, mai recent am dat spre c++ si incerc sa fac exact acelasi lucru.

Am facut rost de un screenshot function cu GDI care salveaza o imagine jpg cu screenshotul ecranului in memorie [sau pe disk, e la alegerea mea] si cu winsock incerc sa o stream la un server cu winAPI gui.

In acel video am folosit TCP, dar in acesta sunt mai dornic sa incerc UDP. Va imaginati ca o sa dau de alta problema, accea ca packetele de UDP maxim pot fi 64kb. Va trebuii sa si tai imaginea jpeg in 2 / 3 bucati si sa trimit in chunks. Dar momentan voi lua totul pas cu pas. Cand ma uit la c++ si ma gandesc ca .NET face totul automat, mi se face scarba. Dar nu voi schimba si nici nu sunt interesat de VC++.NET

Am sa ma uit la linkuri si voi posta un feedback. Multumesc.
Avatar utilizator
Parametru
Junior
Junior
 
Mesaje: 6
Membru din: 15 Iul 2012, 00:04
Judet: Buzău

Re: O problema tip Win32 GUI

Mesajde Ovidiu Cucu » 15 Iul 2012, 13:13

Daca pur si simplu te mananca pielea cand vezi .NET, ia Clorocalcin.
In cazuri mai grave, in care ti se face greata, ia un anti-vomitiv. :)

Well, keep in touch! ;)
Avatar utilizator
Ovidiu Cucu
Fondator
Fondator
 
Mesaje: 3776
Membru din: 11 Iul 2007, 16:10
Localitate: Iasi
Judet: Iaşi

Re: O problema tip Win32 GUI

Mesajde cristianamarie » 26 Iul 2012, 09:41

Cu PNG ai posibilitatile astea:
- external libs gen libpng, sigur au si un drawPng(HDC, ...)
- extract bitmap from PNG: ori GDI+, ori cu WIC decoders (IWICBitmapSource etc)
Nuclear launch detected
Avatar utilizator
cristianamarie
Membru++
Membru++
 
Mesaje: 480
Membru din: 12 Mar 2009, 18:47
Localitate: Iasi
Judet: Iaşi

Re: O problema tip Win32 GUI

Mesajde smithjon » 19 Feb 2015, 08:07

nteles in mare cum functioneaza si cum sa creez o interfatza bazata pe winAPI. Totusi ce nu inteleg eu este, afisarea imaginilor intrun "PictureBox" cum sar spune. Inteleg ca am nevoie de un device content, un WM_PAINT callback si apoi functia LoadBitmap(); DAR, asta merge numai cu bitmapuri. Daca as vrea sa incerc un JPEG sau PNG, nu are merge, mi se pare logic asa ca am facut niste cercetari si am ajuns la concluzia ca am nevoie de GDIplus.


















_______________________________________________________________________________
chess-rivals.com
Ultima oară modificat de smithjon pe 14 Ian 2016, 08:59, modificat de 2 ori în total.
smithjon
Junior
Junior
 
Mesaje: 1
Membru din: 19 Feb 2015, 07:55
Judet: Arad

Re: O problema tip Win32 GUI

Mesajde Ovidiu Cucu » 19 Feb 2015, 22:56

Dumnezeu este mare si ne-a dat noua, pacatosilor din secolul XXI. nenumarate librarii.
Una este GDI+, alta este WIC si mai sunt cata frunza si iarba, stiute si nestiute...
Arunca un ochi aici, da scroll pana te doare degetul si vezi minune: http://codexpert.ro/blog/tag/wic/! :)
Avatar utilizator
Ovidiu Cucu
Fondator
Fondator
 
Mesaje: 3776
Membru din: 11 Iul 2007, 16:10
Localitate: Iasi
Judet: Iaşi

Re: O problema tip Win32 GUI

Mesajde Ovidiu Cucu » 20 Feb 2015, 00:00

In fond si la urma urmei, ceea ce vezi pe ecran, pictat intr-un Device Context este un BITMAP si nu un JPEG, nu un PNG, nu altceva.
BIT-MAP adica o "harta", o matrice de biti din care ochiul tau compune o imagine.
JPEG, PNG, etc sunt formate grafice diferite menite sa pastreze imaginea compresata plus alte informatii.
Daca ai fisiere sau resurse in format JPEG, PNG, etc si vrei sa le afisezi pe ecran, trebuie mai intai convertite la BITMAP.
Aici te pot ajuta librariile de care spuneam mai sus.

LoadBitmap este o functie ramasa de pe vremea cand Pazvante Chioru invata programare Windows pe 16 biti, care saraca nu stie decat sa incarce un bitmap dintr-o resursa tip RT_BITMAP aflata intr-un modul identificat prin HINSTANCE (exe, dll, whatsoever). Putin mai noua este LoadImage, care e ceva mai flexibila si permite incarcarea unui BITMAP atat din resurse cat si in fisiere format BMP, ICO, CUR sau ANI, plus alte briz-briz-uri.

Vezi
Avatar utilizator
Ovidiu Cucu
Fondator
Fondator
 
Mesaje: 3776
Membru din: 11 Iul 2007, 16:10
Localitate: Iasi
Judet: Iaşi


Înapoi la Windows API

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator