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:
makasih gan.. semoga blognya tetap eksis..
Post a Comment