![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Hola a todos.
Yo tengo un problema parecido, ya que tengo una imagen bmp con 256 colores en escala de grises. El problema es que quiero saber que número es un determinado nivel de gris, pero el valor que me arroja es muy grande. ¿Porqué si la imagen tiene 256 colores?, ¿No tendría que ser un valor en este rango?. Saludos ![]() |
|
#2
|
||||
|
||||
|
Cita:
Si quieres un valor entre 0 y 255 siempre puedes tomar el valor de uno solo de los bytes:
Última edición por seoane fecha: 30-10-2006 a las 15:04:10. |
|
#3
|
|||
|
|||
|
Muchas Gracias ya me esta empezando a quedar mas clara la idea....existe alguna manera de calcular la distancia entre dos rectas dibujadas con canvas que sea distinto de revisar pixel por pixel y ver cuando cambia el color del punto. Si alguien sabe que me comente por favor....
Gracias.
__________________
[Lo que a veces es tan facil, a veces parece imposible] |
|
#4
|
|||
|
|||
|
Hola.
Ahora tengo otro problema. Lo que pasa es que al recorrer una imagen me da que esta tiene pixeles blancos aunque la imagen original no tenga ninguno. Lo que hice fué pasar la imagen en RGB a 256 colores con la sentencia: imagen1.canvas.pixel[x,y] and $FF. Salu2. ![]() |
|
#5
|
||||
|
||||
|
Cita:
¿Puedes poner un poco de codigo? |
|
#6
|
|||
|
|||
El código!!!. Ahí va...procedure TForm1.BitBtn1Click(Sender: TObject); var X, Y, Z, W, MaxValor,TamLinea: Integer; Color : LongInt; Histograma : array[0..255] of Integer; begin MaxValor := 0; for Z:=0 to 255 do begin Histograma[Z] := 0; end; for Y := (image1.Width - image1.Width) to image1.Width do begin for X := (image1.Height - image1.Height) to image1.Height do begin Color := image1.Canvas.Pixels[X, Y]and $FF; {De RGB a 256 colores} Histograma[Color] := Histograma[Color]+1; end; end; for Z:=0 to 255 do begin if( Histograma[Z] > MaxValor ) then MaxValor := Histograma[Z]; end; for Z:=0 to 255 do begin TamLinea := ((Histograma[Z] * 312) div MaxValor); image2.Canvas.MoveTo(18+Z, 326); image2.Canvas.LineTo(18+Z, 326-TamLinea); end; end; Salu2 ![]() |
|
#7
|
||||
|
||||
|
Bien, en tu código el problema es el siguiente (marcado en rojo), al hacer referencia a un pixel que no existe devuelve el color blanco por defecto, por eso te aparecía el color blanco aun cuando la imagen no lo contenía:
Por otro lado, retoque un poco el código:
Pero esto ultimo ya es cuestión de gustos. De todas formas para este tipo de operaciones usar la propiedad Pixels del canvas es poco eficiente. Echale un vistazo a la propiedad Scanline del bitmap, mucho mas apropiada para estos casos. PD: Usa la etiquetas [delphi][/delphi] para incluir código, de esta manera se podrá leer mucho mejor. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Como hago un pixel transparente | jorge1987 | Gráficos | 7 | 26-09-2006 20:19:28 |
| pasar imagen pixel a pixel | gulder | Gráficos | 7 | 26-06-2005 02:10:45 |
| Como asignarle atributos a un pixel? | bustio | .NET | 0 | 03-12-2004 20:42:00 |
| Obtener posicion X,Y de un pixel en un TImage | diegofhernando | Varios | 3 | 17-12-2003 15:03:23 |
| ¿ Cual es la mejor forma de implementar una Pizarra con Sockets? pixel a pixel ? | sase | Internet | 1 | 22-10-2003 16:23:50 |
|