Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Converter bmp para raw image


Bryant

Pergunta

18 respostass a esta questão

Posts Recomendados

  • 0
Existe algum componente que transforme de um formato qualquer para raw image?

A conversão não é feita atraves de componente mas de código

Se o lance ainda é biometria, baixe o sdk da Nitgen que é gratuito

Segue o link para o SDK da NitGen

http://www.nitgen.com.br/download/eNBSP_SDK_4.81.zip

ou

http://www.nitgen.com.br/Produtos/HamsterI.aspx

http://www.4shared.com/file/115148868/f0f6...n-HamsterI.html

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Ainda não entendi direito como utilizar as funções de ImgConverter.

Já instalei tudo e agora quero utilizar a função "NBioAPI_ImgConvWSQToRawBuf", ela fica dentro da .dll? Percebi que já possuo no system32, pensei que fosse algo da própria nitgen *perdido* hahaha

Como utilizo qualquer uma das funções de imgconverter deles?

Obrigado mais uma vez Jhonas, ta salvando minha vida!

Link para o comentário
Compartilhar em outros sites

  • 0

Peguei aqui os manuais mas este por exemplo explica como iniciar, e utilizar o enroll e o verify.

No meu caso só quero utilizar as funções que utilizam as imagems. Mas minha dúvida é básica, só quero saber como as chamo ^^

Já instalei tudo mas não sei como posso utilizar estas funções, dou uses na unit mas não possui estas funções das imagens. Esta que é a dúvida.

Obrigado Jhonas.

Link para o comentário
Compartilhar em outros sites

  • 0
No meu caso só quero utilizar as funções que utilizam as imagems. Mas minha dúvida é básica, só quero saber como as chamo ^^

Eu te passei apenas uma das apostilas, voce tem que entrar no site e baixar as outras que tratam desse assunto

Veja na área de download

http://www.nitgen.com.br/Produtos/HamsterI.aspx

por exemplo: neste voce vai achar sobre esse tópico

Módulo Image Conversion

O módulo de conversão de imagem provê algumas APIs que pode ser utilizadas para converter

dados da imagem da impressão digital para vários tipos de formatos de imagens.

http://www.nitgen.com.br/download/Guia_de_...mento_eNBSP.pdf

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que consegui alguma coisa...

function WSQ2Raw(WsqBuffer: PByte; out RawBuffer: OleVariant; out Size: Integer; out Width: Integer; out Height: Integer): Integer;
var
  ImgConv     : THandle;
  WSQToRawBuf : TImgConvWSQToRawBuf;
  OutBuffer   : array[0..420000] of Byte;
  OutBufferPtr: PByte;
  Ix          : Integer;

const
  IMG_DLL   = 'NImgConv.dll';
  RAW_ARRAY = 420000;
  
begin
  Result  := -1;
  ImgConv := LoadLibrary(IMG_DLL);

  try
    if (ImgConv <> 0) then
      begin
        WSQToRawBuf := GetProcAddress(ImgConv, 'NBioAPI_ImgConvWSQToRawBuf');

        OutBufferPtr := PByte(@OutBuffer);
        if @WSQToRawBuf <> nil then
          begin
            Result := WSQToRawBuf(WsqBuffer, OutBufferPtr, Size, Width, Height);

            RawBuffer := VarArrayCreate([0,RAW_ARRAY], varVariant);
            for Ix := 0 to RAW_ARRAY do
              RawBuffer[Ix] := OutBuffer[Ix];
          end;
      end;
  finally
    FreeLibrary(ImgConv);
  end;
end;
Minha dúvida é aqui:
RawBuffer := VarArrayCreate([0,RAW_ARRAY], varVariant);
            for Ix := 0 to RAW_ARRAY do
              RawBuffer[Ix] := OutBuffer[Ix];

* Assim ele não pega os valores

Como eu posso passar um array de byte para um olevariant?

Obrigado Jhonas mais uma vez! ;)

Editado por Bryant
Link para o comentário
Compartilhar em outros sites

  • 0
Como eu posso passar um array de byte para um olevariant?

exemplo:

//delphi convert a byte array to a string 
function ConvertByteArrayToString(const V:OleVariant):string; 
var 
count: Integer; 
ptr: Pointer; 
begin 
Result:=''; 
if VarIsNull(V) then 
Exit; 

count := VarArrayHighBound(V, 1) + 1; 
SetLength(Result,Count); 

ptr := VarArrayLock(V); 
try 
Move(ptr^,Result[1],Count); 
finally 
VarArrayUnlock(V); 
end; 
end;

outros exemplos

http://www.spectrum.eti.br/news/converter_...rray_em_tstream

http://www.spectrum.eti.br/news/taxonomy/term/13

http://www.delphigroups.info/2/11/1028662.html

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Mais uma vez obrigado Jhonas.

Pra quem tiver a mesma dúvida

RawBuffer    := VarArrayCreate( [0,RAW_ARRAY], varByte );
    P            := varArrayLock( RawBuffer );
    
    Move( OutBuffer[0], P^, Length(OutBuffer) );
    VarArrayUnlock( RawBuffer );

Link para o comentário
Compartilhar em outros sites

  • 0

Só para evitar de criar um outro tópico..

Estas conversões são tão erradas assim?

Estou utilizando um .wsq perfeito e quando faço a conversão para .bmp ou .jpg eu tenho um retorno do tipo:

convertido.png

Utilizando as funções

function ImgConvWSQToRawBuf(WsqBuffer: PByte; RawBuffer: PByte; var Size: Integer; var Width: Integer; var Height: Integer): Integer; cdecl; external 'NImgConv.dll' name 'NBioAPI_ImgConvWSQToRawBuf';
function ImgConvRawToBmpBuf(RawBuffer: PByte; Width: Integer; Height: Integer; BmpBuffer: PByte; out Size: Integer): Integer; cdecl; external 'NImgConv.dll' name 'NBioAPI_ImgConvRawToBmpBuf';
E uma função para fazer isto:
class function TImgConverter.WSQ2Raw(WsqBuffer: PByte): Integer;
var
  OutBufferPtr: PByte;
  BmpBuffer   : PByte;
  BmpSize     : Integer;
  OutBuffer   : array of Byte;
  RawBuffer   : array of Byte;
  Size, Width, Height: Integer;
  ArqWsq      : TFileStream;
  tmp         : String;

const
  RAW_ARRAY = 390000;
  BMP_IMG = 'C:\Users\user\Desktop\convertido.jpg';
  
begin
  try
    //BMP
    SetLength(OutBuffer, RAW_ARRAY+1);
    BmpBuffer    := PByte(@(OutBuffer[0]));

    //RAW
    SetLength(RawBuffer, RAW_ARRAY+1);
    OutBufferPtr := PByte(@(RawBuffer[0]));

    Result := ImgConvWSQToRawBuf(WsqBuffer, OutBufferPtr, Size, Width, Height);         //WSQ -> RAW
    Result := ImgConvRawToBmpBuf(OutBufferPtr, Width, Height, BmpBuffer, BmpSize);      //RAW -> BMP

    try
      ArqWsq := TFileStream.Create(BMP_IMG, fmCreate);
      ArqWsq.Write(OutBuffer[0], Length(OutBuffer));
    finally
      if Assigned(ArqWsq) then
        FreeAndNil ( ArqWsq );
    end;
  except
    Result := -1;
  end;
end;

Mas a conversão é feita pessimamente, ele estraga completamente a imagem, fora que depois da execução, um tempinho depois o programa estoura (fiz um executável APENAS com isso).

Tem alguma idéia do porque de uma conversão tão mal feita?

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Não tinha reparado realmente, obrigado Jhonas.

O ruim é que ele não deixa diminuir o tamanho, só se for bem pouco do tipo 380000, senão ele executa a primeira função e logo termina sem fazer nada.

Porque no exemplo de C++ eles realmente utilizam 390000:

lpBMPBuf = new unsigned char[600 * 650];
Po muito estranho isso não é oO ...meio sem idéias :huh: EDIT: o retorno do size está desta maneira:
RAW_ARRAY = 384400;
JPG_ARRAY = 323015;
BMP_ARRAY = 385478;

Este é o out de cada uma das funções, realmente o valor 390000 está certo aparentemente, mas ele quebra mesmo assim =/

Editado por Bryant
Link para o comentário
Compartilhar em outros sites

  • 0

Link para um .rar com 5 samples:

http://www.sendspace.com/file/0o9eln

Obrigado pela ajuda toda ai Jhonas! ;)

Aproveito e vou jogar minha unit toda aqui pra se você puder testar:

unit UImgConverter;

interface

uses
  Classes, Types;

type
  TImgConverter = class
  public
    class function WSQ2JpgBmp(WsqBuffer: PByte): Integer;
  end;

function ImgConvWSQToRawBuf(WsqBuffer: PByte; RawBuffer: PByte; var Size: Integer; var Width: Integer; var Height: Integer): Integer; cdecl; external 'NImgConv.dll' name 'NBioAPI_ImgConvWSQToRawBuf';
function ImgConvRawToBmpBuf(RawBuffer: PByte; Width: Integer; Height: Integer; BmpBuffer: PByte; out Size: Integer): Integer; cdecl; external 'NImgConv.dll' name 'NBioAPI_ImgConvRawToBmpBuf';
function ImgConvRawToJpgBuf(RawBuffer: PByte; Width: Integer; Height: Integer; Quality: Integer; BmpBuffer: PByte; out Size: Integer): Integer; cdecl; external 'NImgConv.dll' name 'NBioAPI_ImgConvRawToJpgBuf';

implementation

uses
  Windows, Dialogs, SysUtils, ActiveX, Variants, NBioBSPCOMLib_TLB;

{=================================================================
  CONVERTE UMA IMAGEM WSQ E SALVA EM BMP E JPG
=================================================================}
class function TImgConverter.WSQ2JpgBmp(WsqBuffer: PByte): Integer;
var
  OutBufferPtr: PByte;
  BmpBuffer   : PByte;
  JpgBuffer   : PByte;

  OutBufferJpg: array of Byte;
  OutBufferBmp: array of Byte;
  RawBuffer   : array of Byte;

  ArqJpg      : TFileStream;
  ArqBmp      : TFileStream;

  BmpSize     : Integer;
  JpgSize     : Integer;
  Size        : Integer;
  Width       : Integer;
  Height      : Integer; 

  NomeArquivo : string;

const
  MAX_ARRAY   = 390000;
  JPG_QUALITY = 75;
  IMG         = 'C:\Users\user\Desktop\convertidas\convertido';

begin
  try
    //RAW
    SetLength(RawBuffer, MAX_ARRAY);
    OutBufferPtr := PByte(@(RawBuffer[0]));

    //BMP
    SetLength(OutBufferBmp, MAX_ARRAY);
    BmpBuffer := PByte(@(OutBufferBmp[0]));

    //JPG
    SetLength(OutBufferJpg, MAX_ARRAY);
    JpgBuffer := PByte(@(OutBufferJpg[0]));

    Result := ImgConvWSQToRawBuf(WsqBuffer, OutBufferPtr, Size, Width, Height);                 //WSQ -> RAW
    Result := ImgConvRawToJpgBuf(OutBufferPtr, Width, Height, JPG_QUALITY, JpgBuffer, JpgSize); //RAW -> JPG
    Result := ImgConvRawToBmpBuf(OutBufferPtr, Width, Height, BmpBuffer, BmpSize);              //RAW -> BMP

    try
      //Criando .jpg e .bmp
      NomeArquivo := IMG + FloatToStr( Now );

      ArqJpg := TFileStream.Create(NomeArquivo + '.jpg', fmCreate);
      ArqJpg.Write(OutBufferJpg[0], JpgSize);

      ArqBmp := TFileStream.Create(NomeArquivo + '.bmp', fmCreate);
      ArqBmp.Write(OutBufferBmp[0], BmpSize);
    finally
      if Assigned(ArqBmp) then
        FreeAndNil ( ArqBmp );
      if Assigned(ArqJpg) then
        FreeAndNil ( ArqJpg );
    end;

  except
    on e:Exception do
      begin
        ShowMessage( e.Message );
        Result := -1;
      end;
  end;
end;

end.

Editado por Bryant
Link para o comentário
Compartilhar em outros sites

  • 0

Bryant... testei suas imagens com 2 programas em delphi que baixei cognaxon

http://www.cognaxon.com/downloads/WSQ_Delphi.zip

http://www.cognaxon.com/downloads/setupWSQ.exe

os programas estão com os fontes, e é necessario que voce use a biblioteca chamada WSQ_library.dll ( $ 252 )

esse programa ( delphi ) consegue converter WSQ em outras extensões ... peguei as suas imagens e converti para JPEG

me diga como fazer upload no site que coloco as figuras para voce ver como ficaram

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas desculpe pela demora na resposta.

Conhecia o cognaxon já, realmente para conversões de boa qualidade, é preciso utilizar um componente pago.

Acabei comprando licenças da griaule mesmo, excelente componente.

Muito obrigado por toda a ajuda!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...