Sto afferrando una parte dello schermo e scansionando i pixel per un determinato intervallo di colori.GetDIBits e loop through pixel utilizzando X, Y
Ho esaminato l'esempio MSDN's Capturing an Image e so come utilizzare le funzioni.
Posso ottenere i bit in un array, ma non sono sicuro di come farlo in modo tale da poterlo scorrere come se fosse un'immagine. Una pseudo-example (che sono sicuro che è lontano):
for (x = 1; x <= Image.Width; x += 3)
{
for (y = 1; y <= Image.Height; y += 3)
{
red = lpPixels[x];
green = lpPixels[x + 1];
blue = lpPixels[x + 2];
}
}
Questo è fondamentalmente ciò che voglio fare, quindi, se rosso, blu e verde è un certo colore, saprò cosa di coordinate che è a (x, y) nell'immagine.
Semplicemente non so come utilizzare GetDIBits in questo modo e come impostare l'array in modo appropriato per essere in grado di farlo.
Nel codice c'è un'istruzione mancante che si inizializza su MyBMInfo .bmiHeader.biSize = sizeof (MyBMInfo); – xMRi
@xMRi Hai ragione, grazie per aver individuato l'errore. Penso che sia corretto ora, ho spostato l'inizializzazione prima della prima chiamata a 'GetDIBits'; AFAIK non è necessario inizializzarlo di nuovo dopo la prima chiamata. – dyp
Hmmm. Non ne sono sicuro. Ho provato questo nel mio codice e se faccio la seconda chiamata a GetDIBits ottengo un errore che la struttura locale ottiene un buffer Overflow nello stack ... Alla fine sono tornato a una soluzione dove inizializzo la struttura manualmente. In alcuni casi non si desidera avere una compressione. Resuscitare l'informazione riutilizzerà la compressione ... Non sono sicuro che ciò sia vero. Ma non ho avuto il tempo di controllarlo ulteriormente. – xMRi