Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-04-2007
natalinuyo natalinuyo is offline
Miembro
 
Registrado: ene 2007
Posts: 64
Poder: 18
natalinuyo Va por buen camino
Error en Bitmap

Saludos a todos:

Para simplificar las cosas... En las siguientes líneas de código:

Código Delphi [-]
Form.Image.Picture.Bitmap.FreeImage();
handle := Form.Image.Picture.Bitmap.ReleaseHandle();
...
Form.Image.Picture.Bitmap.Handle := handle;
...

Me aparece un error como sigue:

Project "x.exe" faulted with message 'access violation at 0x03b73ef7: read for address 0x0000033c'. Process...


Estoy utilizando un lector de huella digital, la imagen es la huella digital...
El punto es que no se si recibe bien la imagen del lector, dado que al momento de poner la huella marca ese error...

Les agradezco de antemano la ayuda que me puedan brindar...
Responder Con Cita
  #2  
Antiguo 17-04-2007
natalinuyo natalinuyo is offline
Miembro
 
Registrado: ene 2007
Posts: 64
Poder: 18
natalinuyo Va por buen camino
Question Error en Bitmap

El punto es el siguiente:

Me marca error al limpiar la imagen...

Me pueden dar una alternativa para liberar espacio de un Image?

Utilizo lo siguiente:
Código Delphi [-]
Image.Picture.Bitmap.FreeImage();

Gracias
Responder Con Cita
  #3  
Antiguo 17-04-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Que código más raro

Hola. El código que pusistes me parece raro porque primero, liberas memoria otilizada por la imagen
" Form.Image.Picture.Bitmap.FreeImage; "
Luuego le quitas el identificador a la imagen y lo guardas en una variable, ten en cuenta
que la variable debe ser de tipo HBitmap

" handle := Form.Image.Picture.Bitmap.ReleaseHandle(); "

Luego vuelves a asignar el identificador de la imagen al mismo objeto.
...
" Form.Image.Picture.Bitmap.Handle := handle; "
...No sé realmente cual es la intención con esto, el accessviolation se presenta porque destruyes la imagen, no deverias de hacer esto, en ves de utilizar un controlador podrías ocupar un objeto TBitmap.

Tavel si explicaras un poco más cuales son tus objetivos con esté código, te pueda ayudar.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 17-04-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Para limpiar un Image solo basta con esta sentencia:

Código Delphi [-]
Image1.Picture := Nil;

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 17-04-2007
natalinuyo natalinuyo is offline
Miembro
 
Registrado: ene 2007
Posts: 64
Poder: 18
natalinuyo Va por buen camino
Cita:
Empezado por D&W
El código que pusistes me parece raro porque primero, liberas memoria otilizada por la imagen.
La limpio para asignarle después la image nueva de huella digital.

Tienes razón no debería asignar nada dado que está limpia la imagen...

Sin embargo se me presenta el error al momento de liberar el espacio de la imagen...
Responder Con Cita
  #6  
Antiguo 17-04-2007
natalinuyo natalinuyo is offline
Miembro
 
Registrado: ene 2007
Posts: 64
Poder: 18
natalinuyo Va por buen camino
En esta parte obtengo la imagen:
Código Delphi [-]
 if biometricDisplay then
    // get image with biometric info
    GrBiometricDisplay(template.tpt,raw.img, raw.width, raw.height,raw.Res, hdc,handle, context)
  else
    // get raw image
    GrCapRawImageToHandle(raw.img, raw.width, raw.height, hdc, handle);

  // draw image on picture box
  if handle <> 0 then
  begin
      Fdetalle.image.Picture.Bitmap.Handle := handle;
      Fdetalle.image.Repaint();
  end;

Ya quité la parte donde limpio la imagen, pero ahora el error aparece justo donde le asigno la imagen...
El codigo es medio extraño (no es mio, así me llegó ), y algunas cosas aun estoy en proceso de comprenderlas...
Responder Con Cita
  #7  
Antiguo 17-04-2007
natalinuyo natalinuyo is offline
Miembro
 
Registrado: ene 2007
Posts: 64
Poder: 18
natalinuyo Va por buen camino
Este es el procedimiento
Código Delphi [-]
// Display fingerprint image on screen
procedure PrintBiometricDisplay(biometricDisplay: boolean; context: Integer);
var
  // handle to finger image
  handle: HBitmap;
  // screen HDC
  hdc: LongInt;
begin
  // free previous image

//  Fdetalle.limpia(handle);

  {If range checking is on - turn it off for now
   we will remember if range checking was on by defining
   a define called CKRANGE if range checking is on.
   We do this to access array members past the arrays
   defined index range without causing a range check
   error at runtime. To satisfy the compiler, we must
   also access the indexes with a variable. ie: if we
   have an array defined as a: array[0..0] of byte,
   and an integer i, we can now access a[3] by setting
   i := 3; and then accessing a[i] without error}
  {$IFOPT R+}
    {$DEFINE CKRANGE}
  {$R-}
  {$ENDIF}
   // get screen HDC
  hdc := GetDC(HWND(nil));

  if biometricDisplay then
    // get image with biometric info
    GrBiometricDisplay(template.tpt,raw.img, raw.width, raw.height,raw.Res, hdc,
                        handle, context)
  else
    // get raw image
    GrCapRawImageToHandle(raw.img, raw.width, raw.height, hdc, handle);

  // draw image on picture box
  if handle <> 0 then
  begin
    Fdetalle.image.Picture.Bitmap.Handle := handle;
//    Fdetalle.image.Picture.Bitmap.Handle := handle;
//    Fdetalle.image.Width := Fdetalle.Bevel1.Width;
  //  Fdetalle.image.Height := Fdetalle.Bevel1.Height;
    Fdetalle.image.Repaint();
  end;

  // release screen HDC
  ReleaseDC(HWND(nil), hdc);

  {Turn range checking back on if it was on when we started}
  {$IFDEF CKRANGE}
    {$UNDEF CKRANGE}
    {$R+}
  {$ENDIF}
end;

Última edición por natalinuyo fecha: 17-04-2007 a las 18:31:32.
Responder Con Cita
  #8  
Antiguo 17-04-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Lo mejor que puedes hacer por el momento es chequear la documentación del componente que estás utilizando para reconocer las huellas. Revise tu código y casi con certeza te puedo decir que la clave está en esta parte del código

Código Delphi [-]
    GrBiometricDisplay(template.tpt,raw.img, raw.width, raw.height,raw.Res, hdc,handle, context)
  else
    // get raw image
    GrCapRawImageToHandle(raw.img, raw.width, raw.height, hdc, handle);

si GrBiometricDisplay y GrCapRawImageToHandle son funciones, seguramente te deben de devolver un controlador o Handle, con lo cual el código quedaría algo así.

Código Delphi [-]
   handle :=  GrBiometricDisplay(template.tpt,raw.img, raw.width, raw.height,raw.Res, hdc,handle, context)
  else
    // get raw image
    handle := GrCapRawImageToHandle(raw.img, raw.width, raw.height, hdc, handle);

También observo que pasas como parámetro la variable handle, ese handle me imagino que es la imagen obtenida del dispositivo, a menos que eso parámetros sean de tipo "var" o "out". De todos modos en este aspecto no te puedo ayudar porque no conozco esas funciones, talvez si conociera su respectiva documentación si te pudiera ayudar. Cualquier cosa me comentas, bye.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #9  
Antiguo 17-04-2007
natalinuyo natalinuyo is offline
Miembro
 
Registrado: ene 2007
Posts: 64
Poder: 18
natalinuyo Va por buen camino
Red face El error no era error...

gracias por tu ayuda....

Resulta que mi problema es otro, igual no lo puedo solucionar aun...

Muchas gracias por tomarte el tiempo de contestarme

Resulta que en mi proyecto tengo 5 units... todo sería muy simple, pero el caso es que todos los sistemas que se desarrollan deben "subirse" a una especie de integrador, tengo q crear DLL's... eso no es problema, pero en este momento me marca error en todo lo que tiene que ver con los objetos del formulario.

Pensé q era de la imagen (en anteriores proyectos me causó problemillas...), pero ya vi que no.

No puedo hacer nada de Enable, visible o asignar valores, etc. en cosas que involucran objetos del formulario principal. Aún cuando los muevo al Form principal no funciona.

Lo raro es q eso no era problema, ya lo había probado con anterioridad y la bronquilla que tenía era que el lector no me funcionaba (no prendía)... Ahora "funciona", pero pues me crea otros conflictos .

Pero lo que me dijiste me aclaró algunas dudas que tenía... GRACIAS!

Última edición por natalinuyo fecha: 17-04-2007 a las 20:29:09.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Transformar a Bitmap Marian0 Gráficos 2 23-02-2007 15:39:06
bitmap en word TONIAM Servers 1 09-09-2005 13:42:38
RaveReport Y Bitmap Rabata Impresión 1 14-05-2005 02:12:01
Bitmap javikanin Gráficos 1 22-11-2004 13:32:15
bitmap en delphi 7 Metralla Impresión 0 14-05-2004 13:47:32


La franja horaria es GMT +2. Ahora son las 08:55:09.


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