Ciao ragazzi, scusate per il titolo ma è il meglio che sono riuscito a definire comunque questi sono i quesiti.
Prendendo spunto da un codice fornitomi da MItaly precedentemente che gestisce le dibsection per rilevare i valori RGB dei pixel dello schermo senza usare la GetPixel() mi chiedevo come fare il contrario (ovviamente no con SetPixel). Esempio di codice:
Ora spiego il codice poichè maca anche una parte:codice:#include <string.h> #include <sstream> //Per stampare le variabili sui box #include <string> //Per stampare le variabili sui box #include <stdlib.h> //Random #include <time.h> //Time to random funzion #include <windows.h> #include <stdio.h> #include <stdexcept> //To create DIBs #include <cstdlib> //To enable writing on a file #include <fstream> //To enable writing on a file using namespace std; int main() {const char * riga1delfile; BYTE Rvalue; BYTE Gvalue; BYTE Bvalue; HDC hdc = GetDC(0); string line; string s; stringstream out; ifstream file ("C:\\Users\\Niko\\Desktop\\sorgente.txt"); { if (file.is_open()) { while (! file.eof() ) { getline (file,line); } file.close(); } riga1delfile = line.c_str(); for(int height=1;height<=100;height++) for(int weight=0;weight<100*9;weight+=9){ //if(*(riga1delfile+weight)=='a'){} { Rvalue=(*(riga1delfile+weight*height))*100 /*QUI*/ +(*(riga1delfile+weight+1*height))*10+(*(riga1delfile+weight+2*height)); Gvalue=(*(riga1delfile+weight+3*height))*100+(*(riga1delfile+weight+4*height))*10+(*(riga1delfile+weight+5*height)); Bvalue=(*(riga1delfile+weight+6*height))*100+(*(riga1delfile+weight+7*height))*10+(*(riga1delfile+weight+8*height)); } SetPixel(hdc,weight/9,height,RGB(Rvalue,Gvalue,Bvalue)); } } return 0; }
con un altro sorgente ho creato un eseguibile che cattura i valori RGB dei pixel dello schermo e li salva in sorgente.txt. Per esempio si potrà trovare 010232134023000123
significa: pixel
coordinate 1.1= Red=10, Green=232, Blue 134,
coordinate 2.1= Red=230, Green=0, Blue=123
questo programma copia il contenuto del file nella variabile line, essa viene poi convertita a const char* riga1delfile.
Infine analizza i vari caratteri di riga1delfile.
Qui però arriva l'intoppo (vedi codice dove è scritto come commento QUI) infatti il programma dovrebbe moltiplicare 100 al primo alla prima cifra del valore Red del Pixel 1.1 ma trova un cost *char e non int, per cui 0*100 non risulta 0 ma 'Ð'.
Pertanto i problemi in questo codice sono:
1) conversione const *char a int convertendo (secondo me se si usa il cast teoricamente doverbbero risulatare problemi di conversione ma potrei sbagliarmi),
2) invece di usare la SetPixel dovrei proiettare i pixel in una dibsection e poi trasferirla su una finestra in modo da vedere lo screen.
PS analizzando meglio il codice voglio fare una revisione: il problema è la convesrsione tra BYTE e int poichè l'operazione 0 * 100 dove 0 è tipo BYTE non riusta 0, inoltre la macro RGB richiede un tipo byte non int: sono incasinato!!!
Ragazzi aiutatemi perfavore.

Rispondi quotando