Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-05-2007
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Bueno, la aplicación, si se trata con cariño, ya es funcional desde ayer, iba a decirlo en un post, pero me dio un error el firefox y se cerró, después me dio pereza volver a escribirlo todo.
seoane, en relación a tu comentario también quería comentarte una función graciosa de mi programa, el problema que se me planteaba era que al comprobar los colores de cada pixel de la cuadrícula de la imagen sólo comprobaba el primero, y al ser JPG, es muy posible que no sea el color exacto buscado, así que lo hice a lo cafre, comprobando hasta encontrar algún pixel del color buscado o comprobarlos todos, que esa es otra cosa, en C, que es el lenguaje en el que estoy acostumbrado a programar, poniendo un "return TalCosa" la función termina y devuelve el valor, en Pascal con el result símplemente le asigna el valor y sigue ejecutando la función, así que apañé la función de esta manera:
Código Delphi [-]
function ComprobarPixel(ColorBuscado: TColor; X, Y: Integer):Boolean; //X e Y son las coordenadas desde la que empieza a buscar el color
var
  i,j: Integer;
  Encontrado: Boolean; //Esta variable es para salir rapidante de la función si encuentra el valor
begin
  with Formulario do
    for j:=0 to 11 do
    begin
      for i:=0 to 11 do
        if Imagen.Canvas.Pixels[X+i,Y+j]=EdtColor.Color then
        begin
          Encontrado:=True;
          break;
        end;
      if Encontrado=True then
        break;
    end;
    if Encontrado=True then
      Result := True
    else
      Result := False;
end;
EDIT:
Buahh! Que se me olvidaba... quería preguntaros por unas funciones que obtengan el color rojo, verde y azul de un RGB, es para crearme un rango al comprobar que un color es el blanco, por el problema de los JPG. He estado buscando en la ayuda y en el foro y no he encontrado nada...

Saludos.

Última edición por Kandorf fecha: 22-05-2007 a las 18:55:38.
Responder Con Cita
  #2  
Antiguo 22-05-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Todo es conocer el lenguaje:
Código Delphi [-]
        if Imagen.Canvas.Pixels[X+i,Y+j]=EdtColor.Color then
        begin
            Result:= True;
            Exit; //<-- Igual al return; de C
        end;
Pocas cosas podrás hacer en C que no puedas hacer en pascal. Yo hasta ahora no he encontrado ninguna ...

Para obtener los valores de rojo, verde y azul utiliza GetRValue, GetGValue y GetBValue.
Responder Con Cita
  #3  
Antiguo 22-05-2007
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Eso ^^ las había visto por ahí alguna vez, pero he estado buscándolas durante más de media hora y no las he encontrado.
Uno, eso del exit es un apaño de lo que hace C xD pero está genial, yo para que me resulte más agradable a la vista lo pondré de esta manera xD:
Código Delphi [-]
if Imagen.Canvas.Pixels[X+i,Y+j]=EdtColor.Color then begin
    Result:= True; Exit; end;
Es por el royo psicológico xD, como se suele hacer con el "fflush(stdin);" en C, después de pedir un valor por teclado. En fin...
Una cosa que no hace Pascal (Bueno, también lo puede hacer, con apaño) es que el "for" de C tiene una comprobación de verdad, en Pascal sólo incrementa una variable ^^.
Un saludo, muchas gracias por la gran ayuda con la que me estás obsequiando.
Responder Con Cita
  #4  
Antiguo 05-06-2007
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Me acerco al foro con vergüenza después de tanto tiempo.
Al programa le he ido dedicando unos días más tiempo y otros menos, ahora está casi listo, pero me surgen 3 problemas:
Cuando el pixel era demasiado oscuro, yo quería escribir el número en color blanco, y lo hacía de esta manera:
Código Delphi [-]
if (((GetRValue(Color)>50) and (GetGValue(Color)>50)) and (GetBValue(Color)>50)) then
  ColorPixel:=CLBlack     //ColorPixel es una variable en la que guardo el color del que voy a pintar el número
else
  ColorPixel:=CLWhite;
Pero sólo me tiene en cuenta la última comprobación de verdad, y un número que tenga mucho rojo y los demás tonos bajos (por ejemplo, el rojo), me lo pinta de color blanco. Hasta ahora no me había preocupado por este problema, porque tampoco pasa nada si el número me lo pinta de color blanco, pero es que esas 3 comprovaciones de verdad son un pilar básico en mi programa, ya que, al ser imágenes JPG las que utiliza, yo me creo un rango que comprueba el color para saber si es el mismo.
Mi pregunta es si hay alguna manera de hacer 3 comprobaciones de verdad en un "if" o si hay alguna manera distinta para conseguir el mismo resultado.

El otro problema que me ha surgido es que al guardar la imagen con el código que me dísteis al principio funcionaba perfectamente, pero ahora me da un error de violación de posición de memoria al terminar de ejecutar la función. Esta es la función:
Código Delphi [-]
procedure TFormulario.ActGuardarExecute(Sender: TObject);
var
  FotoJPEG : TJPEGImage;
  FotoBMP  : TBitmap;
begin
  if DiaGuardar.Execute then
  begin
    FotoBMP := TBitmap.Create;
    try
      FotoBMP:=Imagen.Picture.Bitmap;
      FotoJPEG:=TJPEGImage.Create;
      with FotoJPEG do
      begin
        Assign(FotoBMP);
        SaveToFile(DiaGuardar.FileName);
        Free;
      end;
    finally
      FotoBMP.Free;
    end;
  end;
end;
Que yo recuerde no he modificado la función desde que la hice y ahora me viene dándome problemas -_- No sé dónde está el cambio... ¿Sabríais decirme vosotros dónde está el problema?

EDIT: Se me olvidaba, no conozco la propiedad que cambia el color de la fuente del "Imagen.Canvas.Brush", lo he intentado con "Imagen.Canvas.Brush.Color:=clWhite;", pero lo que me cambia de color es el fondo (como si lo marcara con subrayador).

Después de solucionar estas tres cosas ya sólo me queda utilizar la propiedad que me pasásteis más rápida que pixels y poco más ^^.
Un Saludo y muchas gracias por vuestro tiempo.

Última edición por Kandorf fecha: 05-06-2007 a las 19:40:48.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
necesito ayuda para terminar un detalle vixente Conexión con bases de datos 0 01-06-2006 11:36:50
Necesito ayuda para imprimir por COM1... AFilth Impresión 3 11-02-2006 12:22:49
Necesito ayuda para manerjar archivos meosre Varios 2 08-09-2005 18:37:34
necesito ayuda para hacer un sistema para un billar rober Varios 14 29-07-2004 01:08:02
Necesito ayuda para aprobar... OnClick Varios 10 27-05-2003 02:12:05


La franja horaria es GMT +2. Ahora son las 19:41:47.


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