Saturday, April 16, 2011

Konsep Membuat Gambar Bitmap per Pixel dengan Delphi 7


Gambar bitmap terdiri dari pixel-pixel. Dengan menggunakan delphi 7  dapat dibuat aplikasi yang dapat memanipulasi dan membuat gambar bitmap. Berikut adalah contoh sederhana mengenai konsep pembuatan gambar bitmap dengan memakai database array dan scanline per pixel.

     Form tampilan delphi yang terdiri dari TImage dengan ukuran 200x200 px dan 3 buah button untuk 
mengontrol bitmap yang akan ditampilkan pada TImage. 

Penjelasan source code

implementation

  CONST

    BitsPerPixel = 8;

{$R *.dfm}

Pada implementasi ditambahkan konstanta BitsPerPixel dengan nilai 8. Konstanta ini digunakan sebagai nilai standar untuk pixel yang akan dipakai dalam program, dengan nilai 8 berarti dalam 1 pixel terdapat 8bit data yang akan ditampilkan. Dipakai 8 bit untuk menghemat penulisan data dalam array.

Pada prosedur button

procedure TForm1.Button1Click(Sender: TObject);

 VAR            {variable yang akan dipakai}

   Bitmap:  TBitmap;

   i,j     :  INTEGER;

   Row   :  pByteArray; 

begin

  Bitmap := TBitmap.Create; { pembuatan bitmap}

  TRY

    WITH Bitmap DO

    BEGIN

      Width  := 200;       {setting ukuran bitmap}

      Height := 200;

      PixelFormat := pf1bit;    {format bitmap 1pixel}

    END;



    FOR j := 0 TO Bitmap.Height-1 DO {digunakan array untuk scan bit}

    BEGIN

      Row := pByteArray(Bitmap.Scanline[j]);    {scan baris sesuai array}

      FOR i := 0 TO (Bitmap.Width DIV BitsPerPixel)-1  DO  {pembagian baris untuk 1 pixel adalah 8 bit}

      BEGIN

        Row[i] := Random(256)   {nilai  baris array dapat diisi hexa $00 untuk hitam dan $FF untuk putih}

      END

    END;

    Image1.Picture.Graphic := Bitmap {memasukkan bitmap ke dalam TImage}

  FINALLY  {pengosongan bitmap}

    Bitmap.Free

  END

end;

dan hasil akhir programnya adalah
Dan untuk merubah isi gambar dapat dilakukan dengan merubah  isi array. Karena yang akan ditampilkan biasanya gamabr 2D maka sebaiknya digunakan array 2D. Misalnya array sederhana untuk menampilkan tanda panah dengan bitmap 32x32 pixel:
Arrow:  ARRAY[0..31, 0..3] OF BYTE =

{ 0}    ( ($00, $00, $80, $00),   {00000000 00000000 10000000 00000000}

{ 1}      ($00, $00, $C0, $00),   {00000000 00000000 11000000 00000000}

{ 2}      ($00, $00, $E0, $00),   {00000000 00000000 11100000 00000000}

{ 3}      ($00, $00, $F0, $00),   {00000000 00000000 11110000 00000000}

{ 4}      ($00, $00, $F8, $00),   {00000000 00000000 11111000 00000000}

{ 5}      ($00, $00, $FC, $00),   {00000000 00000000 11111100 00000000}

{ 6}      ($00, $00, $FE, $00),   {00000000 00000000 11111110 00000000}

{ 7}      ($00, $00, $FF, $00),   {00000000 00000000 11111111 00000000}

{ 8}      ($00, $00, $FF, $80),   {00000000 00000000 11111111 10000000}

{ 9}      ($FF, $FF, $FF, $C0),   {11111111 11111111 11111111 11000000}

{10}      ($FF, $FF, $FF, $E0),   {11111111 11111111 11111111 11100000}

{11}      ($FF, $FF, $FF, $F0),   {11111111 11111111 11111111 11110000}

{12}      ($FF, $FF, $FF, $F8),   {11111111 11111111 11111111 11111000}

{13}      ($FF, $FF, $FF, $FC),   {11111111 11111111 11111111 11111100}

{14}      ($FF, $FF, $FF, $FE),   {11111111 11111111 11111111 11111110}

{15}      ($FF, $FF, $FF, $FF),   {11111111 11111111 11111111 11111111}

{16}      ($FF, $FF, $FF, $FF),   {11111111 11111111 11111111 11111111}

{17}      ($FF, $FF, $FF, $FE),   {11111111 11111111 11111111 11111110}

{18}      ($FF, $FF, $FF, $FC),   {11111111 11111111 11111111 11111100}

{19}      ($FF, $FF, $FF, $F8),   {11111111 11111111 11111111 11111000}

{20}      ($FF, $FF, $FF, $F0),   {11111111 11111111 11111111 11110000}

{21}      ($FF, $FF, $FF, $E0),   {11111111 11111111 11111111 11100000}

{22}      ($FF, $FF, $FF, $C0),   {11111111 11111111 11111111 11000000}

{23}      ($00, $00, $FF, $80),   {00000000 00000000 11111111 10000000}

{24}      ($00, $00, $FF, $00),   {00000000 00000000 11111111 00000000}

{25}      ($00, $00, $FE, $00),   {00000000 00000000 11111110 00000000}

{26}      ($00, $00, $FC, $00),   {00000000 00000000 11111100 00000000}

{27}     ($00, $00, $F8, $00),    {00000000 00000000 11111000 00000000}

{28}      ($00, $00, $F0, $00),   {00000000 00000000 11110000 00000000}

{29}      ($00, $00, $E0, $00),   {00000000 00000000 11100000 00000000}

{30}      ($00, $00, $C0, $00),   {00000000 00000000 11000000 00000000}

{31}      ($00, $00, $80, $00));  {00000000 00000000 10000000 00000000}

Nilai yang dimasukkan ke dalam array adalah nilai hexa 8 bit  sedangkan yang akan ditampilkan pada bitmap adalah nilai binernya sehingga gambar terbentuk. Untuk pemanggilannya dapat dipakai dengan merubah row menjadi:
BEGIN

        Row[i] := arrow[j,i]

 END

dari penjelasan dapat disimpulkan pembuatan bitmap sederhana dengan 1 pixel scanning dapat dilakukan dengan memakai prinsip array.

program lengkapnya dapat didownload disini


1 comment:

Unknown said...

makasih gan.. semoga blognya tetap eksis..

Post a Comment