Faz muito tempo que não escrevo nada, não porque sofri muito com tomates e ovos nos posts anteriores, mas porque realmente não tenho nada real para escrever para referência de todos. Mas recentemente, quando eu estava ajudando um amigo em um projeto, me deparei com um processo simples de processamento de imagens em Delphi, então continuei procurando informações na Internet e pesquisando postagens anteriores do csdn. Nos resultados da minha pesquisa, descobri que muitas pessoas. eu encontrei problemas semelhantes de processamento de imagem em vários projetos, mas a maioria das respostas que recebi pareciam incompletas (porque muitas delas não foram concluídas, ou pode ser uma questão de hábitos pessoais. Haha, espero que todos possam começar a trabalhar nisso depois lendo meu artigo. Então escrevi os problemas e soluções que encontrei abaixo para sua referência. Ao mesmo tempo, você está convidado a continuar a fazer tijolos.
Quero anotar o problema que quero resolver antes do conteúdo formal e, ao mesmo tempo, também dá aos leitores um bom posicionamento, para que não se incomodem com meus métodos desajeitados no processo. O principal problema a ser resolvido aqui é girar a imagem digitalizada com o scanner 90 graus em Delphi para obter uma imagem adequada para uso e, como o tamanho da imagem não pode ser captado corretamente, a imagem precisa ser simplesmente dimensionada. E minha solução é totalmente baseada nesse requisito, porque não penso muito em eficiência e clareza após o processamento da imagem, e a vantagem é que o programa parece muito simples.
Em primeiro lugar, não tenho scanner, então não sei qual é o formato da imagem obtida usando o scanner (já fornecido), e na ajuda do Delphi diz "Um bitmap é um objeto gráfico poderoso usado para criar , manipular (dimensionar, rolar, girar e pintar) e armazenar imagens na memória e como arquivos em um disco", então meu primeiro passo é converter minhas fatias em TBitmap para processamento. Ao converter o formato, alterei o tamanho real da imagem para atender às necessidades de seleção posterior de parte da imagem. A função é a seguinte:
Procedimento TMainForm.ChangeImageFormate;
var Bitmap : TBitmap;
Zoom: Inteiro;
começar
Bitmap := TBitmap.Create;//1
tentar
com ImageCert comece
Bitmap.Assign(Picture.Graphic);//2
Foto := nulo;//3
Zoom := Max(Bitmap.Width div Largura,Bitmap.Height div Altura)+1;//4
Largura := Bitmap.Width div Zoom;//5
Altura := Bitmap.Height div Zoom;//6
Canvas.StretchDraw(Rect(0,0,Largura,Altura),Bitmap);//7
fim;
finalmente
Bitmap.Grátis;
fim;
fim;
Acho que esse código não é muito complicado. ImageCert é um controle TImage colocado no Form. A única coisa que pode não ser familiar é a oitava frase, mas você pode obter muitas explicações com a ajuda do Delphi. . (Meu conselho é ler mais ajuda). Ao mesmo tempo, deve-se ressaltar que a terceira frase é muito crítica. Se você remover esta frase e o formato da sua imagem não for bmp, aparecerá o erro "Somente bitmap pode ser modificado".
O segundo passo é realizar a rotação da imagem, pois o programa requer apenas uma rotação de 90 graus de cada vez, por isso é mais fácil de manusear aqui. O método de processamento é substituir de acordo com os pixels. O processo de implementação é o seguinte:
procedimento TMainForm.RotateImage;
var x,y: inteiro;
TmpBitMap : TBitmap;
começar
TmpBitMap := TBitmap.Create;
tentar
TmpBitMap.Assign(ImageCert.Picture.Graphic);
com ImageCert comece
Imagem.Bitmap.Height := TmpBitMap.Width;
Imagem.Bitmap.Width := TmpBitMap.Height;
para x:=0 para Altura faça
para y:=0 para Largura faça
Canvas.Pixels[TmpBitMap.Height-x,y] := TmpBitMap.Canvas.Pixels[y,x];
Altura := TmpBitMap.Width;
Largura := TmpBitMap.Height;
fim;
finalmente
TmpBitMap.Free;
fim;
fim;
Não há muito o que falar neste programa, mas as diversas configurações de altura e largura me deixam muito irritado. Sempre sinto que preciso fazer mais, mas não consigo remover nenhuma linha. Se alguém estiver interessado, pode tentar. isso. Agora, é melhor me contar os resultados. E neste caso, como TImage e TBitmap possuem tela própria, pode valer a pena estudar qual usar, mas devido ao tempo limitado, não experimentei.
Quanto a parte do processo de captura de imagem, usei um TShape, depois configurei o estilo do pincel para bsclear e organizei a posição do TShape no onMouseMove do ImageCert. Isso não é muito sensível, porque quando o mouse estiver no TShape ele irá. não terá qualquer efeito, mas felizmente o impacto será pequeno. Ao mesmo tempo, tirei algumas fotos abaixo do TShape no evento OnMouseDown do TShape. Neste momento, se a sua imagem não tiver sido dimensionada, você descobrirá que a imagem removida não corresponde à posição que vemos (claro, quando o TImage não exibe o tamanho da imagem corretamente).