Delphi 이미지 처리 - 선명하게 만들기

2630 단어
보기 팁:
'델파이 이미지 처리'시리즈는 효율을 중심으로 하고 일반 코드는 PASCAL이며 핵심 코드는 BASM을 사용한다.
《C++ 이미지 처리》 시리즈는 코드가 뚜렷하고 읽을 수 있는 것을 위주로 하고 모두 C++ 코드를 사용한다.
가능한 한 양자의 내용이 일치하도록 유지하고 서로 대조할 수 있다.
본고의 코드는 반드시 문장의 ImageData를 포함해야 한다.pas 단원.
 
Photoshop의 선명한 필터는 이미지에 볼륨을 지정하는 간단합니다. 볼륨 템플릿은 다음과 같습니다.
        0    -1     0
       -1     8    -1
        0    -1     0
Delphi 이미지 프로세싱 - 이미지 볼륨의 일반 볼륨 프로세싱을 사용할 수 있지만 전문적인 프로세싱을 사용하는 것이 더 빠를 것 같아서 다음과 같은 이미지 선명화 프로세싱을 작성했습니다.
procedure DoSharpen(var Dest: TImageData; const Source: TImageData);
asm
    push      ebp
    push      esi
    push      edi
    push      ebx
    mov       ebp, [edx].TImageData.Stride
    call      _SetCopyRegs
    pxor      mm7, mm7
    pcmpeqw   mm5, mm5
    psrlw     mm5, 15
    psllw     mm5, 1
@@yLoop:
    push      ecx
@@xLoop:
    // dest.argb = (center * 8 - up - down - left - right + 2) / 4
    movd      mm2, [esi+4]      // up
    movd      mm1, [esi+ebp]    // left
    movd      mm0, [esi+ebp+4]  // center
    movd      mm3, [esi+ebp+8]  // right
    movd      mm4, [esi+ebp*2+4]// down
    punpcklbw mm0, mm7
    punpcklbw mm1, mm7
    punpcklbw mm2, mm7
    punpcklbw mm3, mm7
    punpcklbw mm4, mm7
    psllw     mm0, 3
    psubw     mm0, mm1
    psubw     mm0, mm2
    psubw     mm0, mm3
    psubw     mm0, mm4
    paddw     mm0, mm5
    psraw     mm0, 2
    packuswb  mm0, mm7
    movd      [edi], mm0
    add       esi, 4
    add       edi, 4
    loop      @@xLoop
    pop       ecx
    add       esi, eax
    add       edi, ebx
    dec       edx
    jnz       @@yLoop
    pop       ebx
    pop       edi
    pop       esi
    pop       ebp
    emms
end;

procedure ImageSharpen(var Data: TImageData);
var
  src: TImageData;
begin
  if Data.AlphaFlag then
    ArgbConvertPArgb(Data);
  src := _GetExpandData(Data, 1);
  DoSharpen(Data, src);
  if Data.AlphaFlag then
    PArgbConvertArgb(Data);
  FreeImageData(src);
end;

다음은 각진 프로세스를 호출하는 간단한 예입니다.
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TGpBitmap;
  g: TGpGraphics;
  data: TImageData;
begin
  bmp := TGpBitmap.Create('..\..\media\source.bmp');
  data := LockGpBitmap(bmp);
  ImageSharpen(data);
  UnlockGpBitmap(bmp, data);
  g := TGpGraphics.Create(Canvas.Handle);
  g.DrawImage(bmp, 0, 0);
  g.Free;
  bmp.Free;
end;

 
'Delphi 이미지 처리'시리즈는 GDI+ 단원을 사용하여 주소를 다운로드하고 설명합니다.'GDI+ for VCL의 기초-GDI+와 VCL'참조.
수준에 한계가 있기 때문에 실수는 불가피하니 시정과 지도를 환영합니다.메일주소:[email protected]
Delphi 이미지 처리 - 포스트 인덱스에 액세스할 수 있습니다.

좋은 웹페이지 즐겨찾기