You are on page 1of 4

* c nh trong C#:

Dng 1 i tng ca lp Bitmap to mi 1 nh( mi hon ton hay c mi t file). VD: Code:
Bitmap bm = new Bitmap("C:\Pictures\abc.jpg");

// lnh trn khai bo 1 bin bm, l 1 nh ly t C:\Pictures\abc.jpg

* In nh ln form:
c c vo bin ri, gi phi in ra mi ngi cng thy ng khng? Dng phng thc DrawImage hin nh ln V d: Hin nh ln form chnh Code:
Graphics gr = CreateGraphics();// Khi to ho trn form chnh gr.DrawImage(bm,0,0); gr.Dispose()// Gii phng bin graphics

Cc tham s ca DrawImage l: bm: nh cn a ra mn hnh 0,0 : to gc trn bn tri ca nh

* Truy xut v thay i tng pixel nh:


**Cu trc file nh:
L 1 ma trn 2 chiu cc pixel, nh thng thng l nh 24 bt, tc l mi pixel 24 bits= 3 bytes. Chng ta tng tng nh sau: pixel u tin ca nh chim 3 byte u (0,1,2); pixel th 2 chim 3 byte tip (3,4,5); c nh th... bit nh bm c kch thc bao nhiu, C# cung cp 2 thuc tnh: bm.Width: s pixel trn 1 hng( rng) bm.Height: s hng( cao) Nh vy, mi hng ca bc nh s dng ht bm.Width*3 bytes lu thng tin (do mi pixel 3 byte) Tuy nhin khi lu vo my, th mi hng ca nh phi dng nhiu hn s byte lu, v mc ch lu c thng tin ca bin th phi ( ci ny s xem thm). bit thc s s byte ny l bao nhiu, u tin phi chuyn bm sang 1 lp m, lp BitmapData V du:

Code:
Rectangle rec = new Rectangle(0,0,bm.Width,bm.Height); BitmapData bmData = bm.LockBits(rec, ImageLockMode.ReadWrite, PixelFormat.24bitrgp);

Cu lnh u tin khai bo 1 hnh ch nht rec, chnh l kch thc ca nh bm, v dng lm tham s cho cu lnh pha di. Phng thc LockBits s chuyn t 1 nh, sang 1 vng nh (bmData). Trn nh bm, ta ch c th xem n, ch khng th chnh s pixel. Mun sa, phi chuyn n sang lp BitmapData, trn c cc th cn thit can thip vo tng im nh. By gi, bmData s "tr cng" cho ta bng cch cung cp cho ta 2 thuc tnh quan trng: - bmData.Stride: s byte thc s m my tnh lu tr mi hng ca nh. Quan trng, v nu ta ngh nh kch thc 5x5, th lu trn a 5x3=15 byte 1 hng, nhng nu stride=16, th khi ta mun xung dng th 2 r x l tip, ta truy xut vo byte th 16, th thc t ta li truy xut vo ci ra ca dng 1. - bmData.Scan0: ch l s 0, khng phi ch O. Ci ny ch ra a ch pixel u tin ca nh m bmData qun l. Mun thay i tng pixel ta phi bit ci ny, ri dng con tr tr n a ch , thay i, sau dch con tr ln 1 n v, tip tc thay i tip. T tng l vy. ** Ghp my th long ngong trn x l 1 bc nh xem no: t ra 1 v d: c 1 bc nh v hin ln form, khi ngi dng nhn vo 1 nt trn form, bin bc nh thnh ton mu trng. Cc bc c nh v hin th ni trn. y ta ch quan tm n vic thay tt c cc pixel ca nh thnh pixel mu trng. Ch mu trng l c 3 byte ca n u bng 255. Code:
BitmapData bmData = bm.LockBits(rec, ImageLockMode.ReadWrite, PixelFormat.24bitrgp); int stride = bmData.Stride; int nOffset = stride - bm.Width*3; //nOffset chnh l ci ra ca bc nh, khi con tr x l n pixel cui cng ca hng, th mun xung //hng k tip, ta phi b qua ci ra ny bng cch cng thm a ch con tr vi nOffset byte *p = (byte*)bmData.Scan0; //p s tr n a ch u ca nh int x,y; for(y = 0; y<bm.Height; y++) { for(x = 0; x<bm.Width; x++) { //X l 3 byte ca pixel p[0] = 255; p[1] = 255; p[2] = 255; //Chuyn con tr sang pixel k tip p += 3; // 2 pixel k tip cch nhau 3 bytes }//X l xong 1 hng

//Chuyn con tr xung hng k tip p += nOffset; } bm.UnLock(bmData);//gii phng bin BitmapData

on lnh trn s bin bc nh thnh mu trng.

** Demo code:
Code km theo lm 2 thao tc v d cho vic x l: - Tng mu ca mi pixel nh ln 20 (menu Contrast) - Thc hin ly nghch o 1 nh( php ton NOT) Ni dung Ni dung chnh ca chung trnh nm trong file Filter.cs, l ni cha cc hm thc hin cc b lc. Cc hm ny s tr v gi tr true nu lc nh thnh cng v false nu ngc li. Chng ta s lm vic i vi cc nh l Bitmap ( cc nh thuc cc nh dng khc u c th d dng chuyn v nh Bitmap) v mt i tng quan trng l BitmapData, nh s c x l trn chnh i tng BitmapData ny. Cu trc ca nh Bitmap: nh Bitmap l mt ma trn cc pixel, chng hn nh vi nh 24 bits th s c 3 bytes dnh cho mi pixel ( mi byte 1 mu ng vi blue, green, red ). Nh vy pixel u tin s chim 3 bytes u (0,1,2); pixel tip theo l (3,4,5) v tip tc. Tuy nhin i tng Bitmap ch dng hin th bc nh. c th x l bc nh, ta cn phi to ra i tng BitmapData thng qua phng thc LockBits ca i tng Bitmap nh sau:

CODE(M) BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); // b.Width: rng ca bc nh // b.Height: cao ca bc nh // PixelFormat.Format24bppRgb: ch ra l nh 24 bits

C th coi BitmapData l mt vng nh m lu tr d liu ca bc nh m thng qua n bn c th chnh sa bc nh theo mnh. BitmapData c nhng thuc tnh quan trng nh sau: Scan0 a ch trong b nh ca mng d liu Width rng tm nh ( s pixel) Height cao tm nh Stride rng theo byte ca mi dng, lun lun ln hn Width PixelFormat nh dng chnh xc ca bc nh

Mi quan h gia Scan0, Stride nh hnh sau:

Nh trn hnh v, thuc tnh Stride mang gi tr l rng ca mt hng tnh theo byte, tuy nhin khng phi lc no cng chnh xc bng s pixel nhn vi s byte mi pixel ( v d 3 * b.Width vi nh 24 bits). Nguyn nhn l tng hiu nng, h thng s lun mc nh cho gi tr tnh theo byte mi hng chia ht cho 4. V d nh mt bc nh 24 bits c 17 pixel mi hng th s c Stride = 52, trong used pixel data = 3*17 = 51 v 1 byte cn li c thm vo c l 52 = 4*13. ( phn thm vo gi l Padding, hay Offset )

You might also like