Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2005
fmtidona fmtidona is offline
Miembro
 
Registrado: sep 2005
Posts: 17
Poder: 0
fmtidona Va por buen camino
Scanline - BMP Monocromo

El siguiente código es un fragmento de un programa que lee de una imagen BMP monocromática.

En teoría cuando leo con scanline los valores tendrían que ser 0 o 1, dependiendo si es blanco o negro, ya que es una imagen monocromática? O cada píxel es de 8 bit? Para mi un píxel representa un bit, no?

Haciendo pruebas, el valor de “a” es 0 siempre que leo un píxel negro, pero a los blancos los lee con diferentes valores, porque?

Gracias

Código Delphi [-]
 for y := 0 to BitMap.Height-1 do
 begin
   P := BitMap.ScanLine[y];
   for x := 0 to BitMap.Width-1 do
   begin
     a := P[x];
     if a=255 then
       blanco:=blanco+1
     else
       otro:= otro+1;
   {...}

Última edición por dec fecha: 19-10-2005 a las 22:41:21. Razón: ¡¡Encerrad el código fuente entre las etiquetas [DELPHI] ... [/DELPHI]!!
Responder Con Cita
  #2  
Antiguo 20-10-2005
OzzyzzO OzzyzzO is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 12
Poder: 0
OzzyzzO Va por buen camino
Tengo un fuente en C para leer un BMP si te sirve avisame.

Saludos
__________________
Juan Pablo
Responder Con Cita
  #3  
Antiguo 20-10-2005
rounin rounin is offline
Miembro
 
Registrado: sep 2005
Posts: 43
Poder: 0
rounin Va por buen camino
Un pixel - un bit.

Código Delphi [-]
 
function GetMonoPixel(P: PArrayOfByte; I: Integer): TColor;
const Colors: array[0..1]of TColor = (clBlack, clWhite);
var NByte, nbit: Integer;
    ByteN: Byte;
begin
  NByte := I div 8;
  nbit := 7 - (I - NByte*8);
  ByteN := P^[NByte];
  Result := Colors[  (ByteN shr nbit) and 1  ];
end;

procedure SetMonoPixel(P: PArrayOfByte; I: Integer; Value: TColor);
var NByte, nbit: Integer;
    ByteN: Byte;
begin
  NByte := I div 8;
  nbit := 7 - (I - NByte*8);
  ByteN := P^[NByte];
  case Value of
    clWhite: ByteN := ByteN or (1 shl nbit);
    clBlack: ByteN := ByteN and (not(1 shl nbit))
    else raise Exception.Create('Only white or black!');
  end;
  P^[NByte] := ByteN;
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:27:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi