Non so se ci sono metodi più semplici, a me sono venute in mente un paio di soluzioni che andrebbero verificate.
Entrambe basate su questo codice:
http://www.gambas-it.org/smf/index.php?topic=6188.msg43395#msg43395
Siccome ciclare tutta l'immagine pixel per pixel è una cosa lenta occorrono degli escamotage uno potrebbe essere:
For X = 0 To PictureBox1.Picture.Width Step 10
For Y = 0 To PictureBox1.Picture.Height Step 10
iColor = PictureBox1.Picture.Image[X, Y]
r += Color[iColor].Red
g += Color[iColor].Green
b += Color[iColor].Blue
Next
Next
L'altro quello di ridurre una copia di immagine con Image.Stretch salvarla importarla ciclarla tutta e eliminarla.
Buon divertimento.
Di più non so... :-\
anche questo codice mi piace ....
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QPixmap pixmap("logo.png");
QImage image = pixmap.toImage();
QRgb col;
QMap<QRgb,int> rgbcount;
QRgb greatest = 0;
int width = pixmap.width();
int height = pixmap.height();
int count = 0;
for (int i = 0; i < width; ++i)
{
for (int j = 0; j < height; ++j)
{
col = image.pixel(i, j);
if (rgbcount.contains(col)) {
rgbcount[col] = rgbcount[col] + 1;
}
else {
rgbcount[col] = 1;
}
if (rgbcount[col] > count) {
greatest = col;
count = rgbcount[col];
}
}
}
qDebug() << count << greatest;
return app.exec();
}
interessante il metodo: rgbcount.contains(col) che dato un valore, ci dice se e' presente nella matrice e' veramente utile e penso sia lo stesso di .Exist dei vettori in gambas.
mi piace che nella scansione sia fatto contemporaneamente lo "stacking" dei colori e l'indicizzazione di quello che e' piu' presente.
in questo modo si mantiene la linearita' del metodo (x*y)
L'unico problema e' che contrariamente a python, se uso un vettore "generico", non posso usare come indice un valore che nel vettore NON esiste gia' ....