ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Exportar imagem dcm com dicomVCL

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
karlosrapanui
Profissional
Profissional


Registrado: Terça-Feira, 29 de Agosto de 2006
Mensagens: 538

MensagemEnviada: Qua Mai 24, 2017 10:09 am    Assunto: Exportar imagem dcm com dicomVCL Responder com Citação

Instalei o componente dicomVCL full em meu D7 e em um dbgrid eu exibo a imagem dcm que esta na pasta...qdo o usuario clica no dbgrid ele exibe a imagem em um DicomMultiViewer1 no form e tb DicomView1.

Só que acontece 2 coisas estranhas

1 - a imagem no componente DicomView1 não é alterada a imagem qdo eu clico no dbgrid. Segue o código do evento onCellClick do dbgrid

caminhoImagem := 'caminhodaimagemnoservidor'+frmFormPrincipal.ADOqrExames_IMAGENSCAMINHO_IMAGEM.AsString;
nomeImagem := caminhoImagem+ '\' +frmFormPrincipal.ADOqrExames_IMAGENSNOME_IMAGEM.AsString;

if not assigned(DicomMultiViewer1.DicomDatasets) then
DicomMultiViewer1.DicomDatasets := TCnsDMTable.Create(self);

DicomMultiViewer1.DicomDatasets.LoadFromFile(nomeImagem);
DicomMultiViewer1.Update;

if not assigned(DicomView1.DicomDatasets) then
DicomView1.DicomDatasets := TCnsDMTable.Create(self);

DicomView1.DicomDatasets.OnLoadFrameFinish := DoLoadFrameFinish;
DicomView1.DicomDatasets.OnLoadFrame := DoLoadFrame;
DicomView1.DicomDatasets.Clear;
DicomView1.DicomDatasets.LoadFromFile(nomeImagem, true, false);
DicomView1.DisplayLabel := True;
DicomView1.AttributesIndex := 0;
DicomView1.LeftMouseInteract := miScroll;
DicomView1.Update;
CustomAddPredefineInformationLabels(DicomView1.Attributes.ImageData);

Como eu disse, exibe normal, só não modifica a imagem.




2 - qdo eu faço a copia da imagem original para uma outra pasta, ela faz a cópia, porem SÓ COPIA A IMAGEM, SEM OS TEXTOS QUE NELA ESTÃO.
Segue o código que utilizo para a copia

caminhoImagem := 'caminhodaimagemnoservidor'+frmFormPrincipal.ADOqrExames_IMAGENSCAMINHO_IMAGEM.AsString;
nomeImagem := caminhoImagem+ '\' +frmFormPrincipal.ADOqrExames_IMAGENSNOME_IMAGEM.AsString;

caminhoImagemNova := ExtractFilePath(Application.ExeName)+'ARQUIVOS\EXAMES\'+FormatDateTime('ddmmyyyy',ADOqrImagemConvertidaDATA_EXAME.AsDateTime)+'\';
if not DirectoryExists(caminhoImagemNova) then
ForceDirectories(caminhoImagemNova);

nomeImagemNova := StringReplace(frmFormPrincipal.ADOqrExames_IMAGENSNOME_IMAGEM.AsString,'.','',[rfReplaceAll])+'.dcm';

if not assigned(DicomView1.DicomDatasets) then
DicomView1.DicomDatasets := TCnsDMTable.Create(self);
DicomView1.DicomDatasets.OnLoadFrameFinish := DoLoadFrameFinish;
DicomView1.DicomDatasets.OnLoadFrame := DoLoadFrame;
DicomView1.DicomDatasets.Clear;
DicomView1.DicomDatasets.LoadFromFile(nomeImagem, True, False);
DicomView1.DisplayLabel := True;
DicomView1.AttributesIndex := 0;
DicomView1.LeftMouseInteract := miScroll;
DicomView1.Update;
CustomAddPredefineInformationLabels(DicomView1.Attributes.ImageData);

CopyFile(PChar(nomeImagem), Pchar(caminhoImagemNova+nomeImagemNova), True);

Faz a copia normal, porem remove todos os textos que estão na imagem.


O mais dificil é que não conheço esse componente, fiz a instalação e to apanhando com ele.

Caso alguem aqui utiliza e puder me ajudar, fico muito agradecido.

[]'s
Carlos
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Qua Jun 14, 2017 3:45 pm    Assunto: Responder com Citação

No ato de exibir o arquivo cdm no DicomMultiViewer1 ele exibe tanto a imagem quanto o texto na imagem isso pq o arquivo cdm possui tanto dados (metadados) de imagem quanto de texto.

Para exportar tal como você ver no componente DicomMultiViewer1 exite uma forma sim :) que deve ser funcional.

Basta usar o handle do componente com o código abaixo:

Código:
procedure TForm1.BitBtn1Click(Sender: TObject)
begin
var
  dc:hdc;
  cv:TCanvas;
  bmp:= TBitmap;
begin
  bmp:= TBitmap.Create;
  result.Width := DicomMultiViewer1.Width;
  result.Height := DicomMultiViewer1.Height;
  dc := GetDc(DicomMultiViewer1.handle); // todo componente visual possui handle (essencial para o windows desenhar a tal coisa na tela)
  cv := TCanvas.Create;
  cv.Handle := DC;
  bmp.Canvas.CopyRect(Rect(
    0, 0, DicomMultiViewer1.Width, DicomMultiViewer1.Height),
    cv, Rect(0,0,DicomMultiViewer1.Width, DicomMultiViewer1.Height));
  cv.Free;
  ReleaseDC(0, DC);
  bmp.save('c:\teste\teste.bmp');// local e nome onde a imagem, já com o texto para ser salva
  bmp.free;
end;

_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
karlosrapanui
Profissional
Profissional


Registrado: Terça-Feira, 29 de Agosto de 2006
Mensagens: 538

MensagemEnviada: Seg Jun 19, 2017 3:41 pm    Assunto: Responder com Citação

Fiz da maneira que vc colocou

procedure TfrmVisualizarExame.Button1Click(Sender: TObject);
var
dc:hdc;
cv:TCanvas;
bmp: TBitmap;
begin

bmp:= TBitmap.Create;
// result.Width := DicomMultiViewer1.Width; // aqui deu erro
// result.Height := DicomMultiViewer1.Height; // aqui tb

// da erro em result

dc := GetDc(DicomMultiViewer1.Handle); // todo componente visual possui handle (essencial para o windows desenhar a tal coisa na tela)
cv := TCanvas.Create;
cv.Handle := DC;
bmp.Canvas.CopyRect(Rect(
0, 0, DicomMultiViewer1.Width, DicomMultiViewer1.Height),
cv, Rect(0,0,DicomMultiViewer1.Width, DicomMultiViewer1.Height));
cv.Free;
ReleaseDC(0, DC);
bmp.SaveToFile('d:\botoes\teste.bmp');// local e nome onde a imagem, já com o texto para ser salva
bmp.free;
end;


Ele até gera o arquivo, mas com tamanho 0
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Seg Jun 19, 2017 3:50 pm    Assunto: Responder com Citação

tente mudar esta linha:
dc := GetDc(DicomMultiViewer1.Handle); // todo componente visual possui handle (essencial para o windows desenhar a tal coisa na tela)

para

dc := GetDc(DicomMultiViewer1.canvas.Handle); // todo componente visual possui handle (essencial para o windows desenhar a tal coisa na tela)

é apenas um palpite não tenho cá o componente DicomMultiViewer assim não sei se o mesmo possui canvas.
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB