Torna al Thread

//Ottiene i bytes di un'immagine array<Byte> ^GetBytesFromBitmap(Bitmap ^bmp) { array<Byte> ^result = gcnew array<Byte>(bmp->Width * bmp->Height * 4); int index = 0; for(int x = 0; x < bmp->Width; x++) { for(int y = 0; y < bmp->Height; y++) { array<Byte> ^tmp = BitConverter::GetBytes(bmp->GetPixel(x, y).ToArgb()); tmp->CopyTo(result, index); index += 4; } } return result; } //Imposta i bytes di un'immagine //Ritorna il numero di bytes letti int SetBitmapBytes(Bitmap ^bmp, array<Byte> ^bytes) { int index = 0; for(int x = 0; x < bmp->Width; x++) { for(int y = 0; y < bmp->Height; y++) { Color color = Color::FromArgb(BitConverter::ToInt32(bytes, index)); bmp->SetPixel(x, y, color); index += 4; } } return index; } //Codifica un'immagine. additiveBytes, passato per riferimento, alla fine contiene //i bytes aggiuntivi ottenuti dalla codifica, che servono per una successiva corretta decodifica Bitmap ^Encode(Image ^imgToEncode, System::Security::Cryptography::Rijndael ^rijndael, array<Byte> ^%additiveBytes) { //Creo l'immagine da crittare Bitmap ^crypted = gcnew Bitmap(imgToEncode->Width, imgToEncode->Height, System::Drawing::Imaging::PixelFormat::Format32bppArgb); //Ottengo i bytes dell'immagine da crittare array<Byte> ^bytes = GetBytesFromBitmap((Bitmap^)imgToEncode); //Ottengo i bytes crittati array<Byte> ^cryptedBytes = rijndael->CreateEncryptor()->TransformFinalBlock(bytes, 0, bytes->Length); //Imposti i bytes dell'immagine cittata e ottieni il numero di bytes letti int readBytes = SetBitmapBytes(crypted, cryptedBytes); //imposta i bytes aggiuntivi ottenuti dalla codifica con rijndael additiveBytes = gcnew array<Byte>(cryptedBytes->Length - readBytes); Array::Copy(cryptedBytes, readBytes, additiveBytes, 0, additiveBytes->Length); //Ritorna l'immagine return crypted; } //Decodifica un'immagine. additiveBytes deve essere l'array di bytes ottenuto dalla codifica //con Encode Bitmap ^Decode(Image ^imgToDecode, System::Security::Cryptography::Rijndael ^rijndael, array<Byte> ^additiveBytes) { //Crea l'immagine da decrittare Bitmap ^decrypted = gcnew Bitmap(imgToDecode->Width, imgToDecode->Height, System::Drawing::Imaging::PixelFormat::Format32bppArgb); //Ottiene i bytes da decrittare array<Byte> ^bytes = GetBytesFromBitmap((Bitmap^)imgToDecode); int len = bytes->Length; //Aggiunge i bytes aggiuntivi ottenuti da una precedente codifica Array::Resize(bytes, bytes->Length + additiveBytes->Length); additiveBytes->CopyTo(bytes, len); //decritta i bytes array<Byte> ^decryptedBytes = rijndael->CreateDecryptor()->TransformFinalBlock(bytes, 0, bytes->Length); //imposta i bytes dell'immagine SetBitmapBytes(decrypted, decryptedBytes); //Ritorna l'immagine return decrypted; }
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5