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:
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;
}
Ora spiego il codice poichè maca anche una parte:
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.