Ilmu adalah hal yang terpenting dalam hidup, carilah ilmu dan amalkan ilmu yang kau dapat...

KOMPRESI GAMBAR DENGAN DELPHI


Kompresi Citra adalah aplikasi Kompresi data yang dilakukan terhadap citra digital dengan tujuan untuk mengurangi redundansi dari data-data yang terdapat dalam citra sehingga dapat disimpan atau ditransmisikan secara efisien.  Teknik Kompresi Citra ada 2:
1. Lossy Compression
        Ukuran file citra menjadi lebih kecil dengan menghilangkan beberapa informasi dalam citra asli.
        Teknik ini mengubah detail dan warna pada file citra menjadi lebih sederhana tanpa terlihat perbedaan yang mencolok dalam pandangan manusia, sehingga ukurannya menjadi lebih kecil.

2. Loseless Compression
        Biasanya digunakan pada citra foto atau image lain yang tidak terlalu memerlukan detail citra, dimana kehilangan bit rate foto tidak berpengaruh pada citra
        Beberapa teknik loseless:
×          Color reduction: untuk warna-warna tertentu yang mayoritas dimana informasi warna disimpan dalam color palette.
×          Chroma subsampling: teknik yang memanfaatkan fakta bahwa mata manusia merasa brightness (luminance) lebih berpengaruh daripada warna (chrominance) itu sendiri, maka dilakukan pengurangan resolusi warna dengan disampling ulang. Biasanya digunakan pada sinyal YUV.

Cara menbuat programnya :
1.           Siapkan program diatas / sebelumnya (program Delphi histogram pada bahasan sebelumnya).
2.           Buka form MainForm (tekan Shift+F12), tambahkan Kompres pada MainMenu1 di dalam Image. Dan isikan prosedur.
3.           Buat Form baru, beri caption form dengan kompresi gambar
4.           Tambahkan 3 Button atau BitBtn, masing masing dengan nama Kompresi, open, exit.
5.           Dan beri prosedur sebagai berikut :
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, ExtDlgs, ExtCtrls;

type
  TForm1 = class(TForm)
    OpenPictureDialog1: TOpenPictureDialog;
    BitBtn1: TBitBtn;
    Kompresi: TSpeedButton;
    Image1: TImage;
    Button1: TButton;
    procedure KompresiClick(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  gambar:Tbitmap;
  awal:Tbitmap;
  akhir:Tbitmap;
implementation

{$R *.dfm}

procedure TForm1.KompresiClick(Sender: TObject);
var b,c,a       : integer;
    x, digit    : byte;
    temp,temp2  : PByteArray;

begin
   awal   := TBitmap.Create;
   gambar := TBitmap.Create;
   gambar.LoadFromFile(OpenPictureDialog1.filename);
   awal.assign(gambar);
   Form1.Caption:='Image Processing - '+ExtractFileName(OpenPictureDialog1.Filename);
   gambar.PixelFormat := Pf24bit;
   gambar.SaveToFile('Hasilkompres.bmp');
   for c:=0 to gambar.Height-1 do
     begin
        temp := gambar.ScanLine[c];
        temp2 := awal.Scanline[c];
        b:=0;x:=b;digit:=0;
        repeat
          temp2[x]:=round(0.25*(temp[b+digit]+temp[b-digit]+temp[b])/3);
          inc(b,3);x:=x+1;
        until b >= 3*gambar.Width-1;
     end;
     a:=round((gambar.Width-1)/3);
     awal.pixelformat:=pf8bit;
     for c:=0 to gambar.Height-1 do
     begin
        temp := gambar.ScanLine[c];
        temp2 := awal.Scanline[c];
        b:=0;x:=b;
        repeat
          temp[x]:=round(temp2[b]);
          inc(b,1);x:=x+1;
        until b >= a;
     end;
     gambar.PixelFormat := Pf8bit;
     Image1.Picture.Bitmap := gambar;
     gambar.SaveToFile('Hasilkompres.bmp');
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if not OpenPictureDialog1.Execute then exit else
    begin
        gambar := TBitmap.Create;
        gambar.LoadFromFile(OpenPictureDialog1.filename);
        Form1.Caption:='Image Processing - '+ExtractFileName(OpenPictureDialog1.Filename);
    end;
    Image1.Picture.Bitmap := gambar;
    kompresi.Enabled:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
kompresi.Enabled:=false;
end;
end.

0 komentar:

Posting Komentar