PDA

View Full Version : [c++]problema con getpixel


ncrndr
07-07-2015, 22:52
Buona sera a tutti,sono nuovo del forum. Da poco ho iniziato a programmare ed attualmente il mio obbiettivo è riuscire a creare un programma che identifichi i colori di una bitmap.

Ho scritto il seguente codice:



#include<iostream>
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<gdiplus.h>
using namespace std;
int main(){

HDC hdc;

int altezza,larghezza;
cout<<"\nInserisci la larghezza dell'immagine: ";
cin>>larghezza;
cout<<"\nInserisci l'altezza dell'immagine: ";
cin>>altezza;

int red[4000][4000];
int blue[4000][4000];
int green[4000][4000];

for(int x=1;x<larghezza;x++) {
for(int y=1;y<altezza;y++) {
COLORREF colore=getpixel(hdc, x, y);
red[x][y]=GetRValue(colore);
blue[x][y]=GetBValue(colore);
green[x][y]=GetGValue(colore);
}
}

(il codice continua con l'elaborazione dei dati)


l'unico problema che ho riscontrato è stato che non riesco ad inserire un'immagine in "hdc".
ho provato un po' di tutto: fopen, LoadImage, GetDC ma nessuna di queste ha funzionato.

qualcuno di voi saprebbe gentilmente indicarmi la funzione adatta?

ho inoltre provato ad usare bitmap.getpixel(x,y) ma anche qui il problema è lo stesso :(

ncrndr
08-07-2015, 13:35
nessuno riesce ad aiutarmi?

tomminno
08-07-2015, 17:36
Ma cosa devi fare?
E inoltre perchè martellarsi sui cabbasisi con le GDI?

La prima cosa che mi viene in mente è che nel tuo codice non hai inizializzato le GDI.

Dovrebbe essere qualcosa del genere:

int main()
{
ULONG_PTR m_gdiplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

Bitmap bitmap(L"c:\path\to\image.jpg");

Color pixelColor;

for (int h = 0; h <bitmap.GetHeight(); h++)
{
for (int w = 0; w < bitmap.GetWidth(); w++)
{
bitmap.GetPixel(w, h, &pixelColor);
cout << pixelColor.GetA() << endl;
cout << pixelColor.GetB() << endl;
cout << pixelColor.GetG() << endl;
cout << pixelColor.GetR() << endl;
}

}

GdiplusShutdown(m_gdiplusToken);

return 0;
}