Problemas con los bitmaps

06/09/2006 - 20:32 por raketa | Informe spam
Buenas a todos
Mi problema es el siguiente.
Estoy progrmanado con c# una aplicación que en un momento dado tengo que
escribir una frase dentro de un bitmap y representarlo en una pantalla
monocromo. El problema está en que a causa del tipo de formato que se define
a las letras del bitmap, me escribe las letras con difuminados para poder
aplicar el formato correctamente.
Con estos difuminados las letras se ven a rayas y no se puede leer el texto
correctamente, ya que la pantalla es en blanco y negro.
¿Alguien sabe la manera de escribir solo en blanco y negro sin pasar por las
escalas de grises?

Preguntas similare

Leer las respuestas

#1 RAlvare
07/09/2006 - 00:02 | Informe spam
Buenas a todos
Mi problema es el siguiente.
Estoy progrmanado con c# una aplicación que en un momento dado tengo que
escribir una frase dentro de un bitmap y representarlo en una pantalla
monocromo. El problema está en que a causa del tipo de formato que se
define
a las letras del bitmap, me escribe las letras con difuminados para poder
aplicar el formato correctamente.
Con estos difuminados las letras se ven a rayas y no se puede leer el
texto
correctamente, ya que la pantalla es en blanco y negro.
¿Alguien sabe la manera de escribir solo en blanco y negro sin pasar por
las
escalas de grises?



No sé si estaré diciendo alguna barbaridad porque nunca he tenido que poner
nada en blanco y negro, sí en
escala de grises, pero, pienso que el bitmap se puede convertir a blanco y
negro con una funcion que lea sus pixels y los convierta a blanco
o negro según su mayor o menor proximidad al RGB (0,0,0) (Negro) o al RGB
(255,255,255) (Blanco)


Color pixel;
for (int y = 0; y < m_altoImagen; y++)

{

for (int x = 0; x < m_anchoImagen; x++)

{

// Obtener un pixel de la imagen

pixel = MapaDeBits.GetPixel(x, y);

// Obtener el color promedio

t = (pixel.R + pixel.G + pixel.B) / 3;

// Colocar el pixel nuevo

MapaDeBits.SetPixel(x, y, Color.FromArgb(t, t, t))

}

}

Lo anterior convierte a escala de grises de forma imperfecta, no se calcula
correctamente la luminancia, para mayor precisión se deberia usar la
fórmula:
lum= (int)(pixel.R*0.3 + pixel.G*0.59+ pixel.B*0.11);

pondrías MapaDeBits.SetPixel(x,y,Color.FromArgb(lum,lum,lum))



Saludos.

RAlvare.

Lugones.
Respuesta Responder a este mensaje
#2 raketa
07/09/2006 - 10:01 | Informe spam
Buenas, pos si, algo parecido he hecho y no funciona correctamente, el
decidir que cuando decide que la tonalidad es blanco es correcto pero cuando
decide que el pixel es negro deforma las letras. Seguramente esto para un
grafico si que funcionará... No hay ninguana manera para poder escribir sin
el formato?? que solo se pinten los pixeles en negro dentro de un fondo
blanco??

"RAlvare" wrote:

> Buenas a todos
> Mi problema es el siguiente.
> Estoy progrmanado con c# una aplicación que en un momento dado tengo que
> escribir una frase dentro de un bitmap y representarlo en una pantalla
> monocromo. El problema está en que a causa del tipo de formato que se
> define
> a las letras del bitmap, me escribe las letras con difuminados para poder
> aplicar el formato correctamente.
> Con estos difuminados las letras se ven a rayas y no se puede leer el
> texto
> correctamente, ya que la pantalla es en blanco y negro.
> ¿Alguien sabe la manera de escribir solo en blanco y negro sin pasar por
> las
> escalas de grises?

No sé si estaré diciendo alguna barbaridad porque nunca he tenido que poner
nada en blanco y negro, sí en
escala de grises, pero, pienso que el bitmap se puede convertir a blanco y
negro con una funcion que lea sus pixels y los convierta a blanco
o negro según su mayor o menor proximidad al RGB (0,0,0) (Negro) o al RGB
(255,255,255) (Blanco)


Color pixel;
for (int y = 0; y < m_altoImagen; y++)

{

for (int x = 0; x < m_anchoImagen; x++)

{

// Obtener un pixel de la imagen

pixel = MapaDeBits.GetPixel(x, y);

// Obtener el color promedio

t = (pixel.R + pixel.G + pixel.B) / 3;

// Colocar el pixel nuevo

MapaDeBits.SetPixel(x, y, Color.FromArgb(t, t, t))

}

}

Lo anterior convierte a escala de grises de forma imperfecta, no se calcula
correctamente la luminancia, para mayor precisión se deberia usar la
fórmula:
lum= (int)(pixel.R*0.3 + pixel.G*0.59+ pixel.B*0.11);

pondrías MapaDeBits.SetPixel(x,y,Color.FromArgb(lum,lum,lum))



Saludos.

RAlvare.

Lugones.





Respuesta Responder a este mensaje
#3 RAlvare
07/09/2006 - 11:45 | Informe spam
"raketa" escribió en el mensaje
news:
Buenas, pos si, algo parecido he hecho y no funciona correctamente, el
decidir que cuando decide que la tonalidad es blanco es correcto pero
cuando
decide que el pixel es negro deforma las letras. Seguramente esto para un
grafico si que funcionará... No hay ninguana manera para poder escribir
sin
el formato?? que solo se pinten los pixeles en negro dentro de un fondo
blanco??



Yo he usado este método para escribir texto y al usar un SolidBrush no hay
variaciones en el color del texto:

A ver si este fragmento de código te da una pista:

SolidBrush brocha = new SolidBrush(ColorElegido);


System.Windows.Forms.PaintEventArgs paintEvent
new PaintEventArgs(System.Drawing.Graphics.FromImage(img), new
Rectangle(m_controlRaton.verCoorOrigen.X, m_controlRaton.verCoorOrigen.Y,
100, 100));

paintEvent.Graphics.DrawString(this.textBox1.Text,
m_trataImagen.FuenteSeleccionada,brocha, new
PointF(m_controlRaton.verCoorOrigen.X,m_controlRaton.verCoorOrigen.Y));



Saludos.

RAlvare.

Lugones.Asturias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida