|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
karlosrapanui Profissional
Registrado: Terça-Feira, 29 de Agosto de 2006 Mensagens: 538
|
Enviada: Qua Mai 24, 2017 10:09 am Assunto: Exportar imagem dcm com dicomVCL |
|
|
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 |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Qua Jun 14, 2017 3:45 pm Assunto: |
|
|
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 |
|
|
karlosrapanui Profissional
Registrado: Terça-Feira, 29 de Agosto de 2006 Mensagens: 538
|
Enviada: Seg Jun 19, 2017 3:41 pm Assunto: |
|
|
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 |
|
|
strak2012 Colaborador
Registrado: Segunda-Feira, 13 de Janeiro de 2014 Mensagens: 1518 Localização: Maceió - AL
|
Enviada: Seg Jun 19, 2017 3:50 pm Assunto: |
|
|
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 |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|