En ocasiones puedes necesitar almacenar la definición de uno o varios colores en alguna tabla en tu base de datos. La forma más fácil y rápida para ello es guardar el color en formato HTML, como una simple cadena de texto.
Con estas sencillas funciones podrás convertir una cadena en formato de color Html en un color que luego puedes aplicar a otros controles y viceversa, es decir, podrás convertir un color en una cadena en formato de color Html.
También incluimos una pequeña verificación para saber que el color recibido en formato Html está bien creado.
A continuación el código de las tres funciones:
/// <summary>
/// Obtiene una cadena de texto comprimida
/// </summary>
/// <param name=”Value“>Cadena de texto a comprimir</param>
/// <returns></returns>
public static string Zip(string Value)
{
if (string.IsNullOrEmpty(Value))
{
return null;
}
MemoryStream ms = null;
GZipStream sw = null;
try
{
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream();
sw = new GZipStream(ms, CompressionMode.Compress);
sw.Write(byteArray, 0, byteArray.Length);
sw.Close();
byteArray = ms.ToArray();
return System.Convert.ToBase64String(byteArray);
}
catch (Exception ex)
{
MessageBox.Show(“Error: “ + Environment.NewLine+ ex.Message, “Test”,
MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
finally
{
sw.Dispose();
ms.Close();
ms.Dispose();
}
}
/// <summary>
/// Descomprime una cadena de texto en formato comprimido
/// </summary>
/// <param name=”Compressedvalue“></param>
/// <returns>La cadena descomprimida o null si hay errores</returns>
public static string Unzip(string Compressedvalue)
{
MemoryStream stream = null;
Stream sourceStream = null;
MemoryStream memoryStream = null;
try
{
byte[] byteArray = System.Convert.FromBase64String(Compressedvalue);
stream = new System.IO.MemoryStream(byteArray);
sourceStream = stream;
if (sourceStream == null || !sourceStream.CanRead)
{
MessageBox.Show(“Imposible leer la cadena comprimida recibida!!”, “Test”,
MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
memoryStream = new System.IO.MemoryStream();
int bufferSize = 65536;
using (GZipStream gzipStream = new GZipStream(sourceStream, CompressionMode.Decompress))
{
byte[] buffer = new byte[bufferSize + 1];
int bytesRead = 0;
do
{
bytesRead = gzipStream.Read(buffer, 0, bufferSize);
memoryStream.Write(buffer, 0, bytesRead);
}
while (bytesRead == bufferSize);
}
var btArraymemoryStream = memoryStream.ToArray();
return System.Text.Encoding.UTF8.GetString(btArraymemoryStream);
}
catch (Exception ex)
{
MessageBox.Show(“Error: “ + Environment.NewLine + ex.Message, “Test”,
MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
finally
{
stream.Dispose();
sourceStream.Dispose();
memoryStream.Dispose();
}
}
Para ponerlo a prueba puedes crearte un formulario parecido al siguiente:
A continuación el código para los eventos de los controles
private void btZip_Click(object sender, EventArgs e)
{
this.txtZipedText.Clear();
if (!string.IsNullOrEmpty(this.txtUnzipedText.Text))
{
this.txtZipedText.Text = MyClase.Zip(this.txtUnzipedText.Text);
}
}
private void btUnzip_Click(object sender, EventArgs e)
{
this.txtUnzipedText.Clear();
if (!string.IsNullOrEmpty(this.txtZipedText.Text))
{
this.txtUnzipedText.Text = MyClase.Unzip(this.txtZipedText.Text);
}
}
Si todo ha ido bien deberías obtener un resultado parecido al siguiente:
Ponlo a prueba, piensa en cómo mejorarlo y comparte con nosotros tus progresos.