P. 1
New Microsoft PowerPoint Presentation __2_

New Microsoft PowerPoint Presentation __2_

|Views: 1|Likes:
Published by Little Chick

More info:

Published by: Little Chick on Apr 17, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPTX, PDF, TXT or read online from Scribd
See more
See less

05/14/2014

pdf

text

original

XỬ LÝ ẢNH BITMAP

NHÓM 33
11520097: Phạm Nguyên Hải ___ 11520115: Dương Thanh Hòa

NỘI DUNG
  


        

Tổng Quan Bitmap Support Overview Loading Image System.Drawing.Image Image Information System.Drawing.Bitmap Bitmap Methods Binary Resources Animation Picture Box Sprite Matrix Thảo luận

Tổng Quan

Trong máy tính, có hai loại ảnh (graphic) Vector
 Ảnh

được tạo thành từ những đường thẳng, đường cong. Vector được tạo thành dựa trên biểu thức toán học.  Vd: Fonts, CAD Program, Adobe Illustrator, …

Raster
 Ảnh

được tạo thành từ những hàng pixel hình chữ nhật (rectangular arrays)  bitmap  Hầu hết ảnh đều ở dạng bitmap

Bitmap Support Overview

System.Drawing namespace có 2 lớp: Image và Bitmap Bitmap class và Metafile class kế thừa từ Image class (abstract) Bitmap file formats
 Một

bitmap có một chiều cao và rộng cụ thể được đo lường bằng pixel.  Một bitmap cũng có một color depth cụ thể, là số bit trên mỗi pixel (bpp)

FromHbitmap .IntPtr hbitmap)  Image.Stream stream) (System.FromFile 1 image bằng cách stream từ 1 bitmap hợp lệ (System.Loading Image  Có 3 cách:  Lấy  Lấy  Lấy 1 image từ 1 bitmap file trên đĩa (string filename)  Image.FromStream 1 đối tượng bitmap sử dụng Win32 GDI bitmap  Image.IO.

DrawImageUnscaled  .Image  Cây phân cấp (hierarchy) Object MarshalByRefObject Image  Khai báo một đối tượng image  Image image. DrawIcon.  Hỗ trợ các định dạng bitmap: .bmp  .gif .DrawImage.exif .wmf .tiff .jpg . DrawIconUnstretched.System.emf Cho phép vẽ hình ảnh dùng Graphics.png .Drawing.

EventArgs e) {if (bitmap1 != null) { bitmap1. PictureBox1.RotateNoneFlipX: Flip theo chiều X  RotateFlipType.Image   Lớp Image còn cung vấp phương thức RotateFlip dùng để quay và flip ảnh RotateFlipType xác định kiểu quay của đối tượng Quay 90 độ  RotateFlipType. System.Drawing.RotateFlip(RotateFlipType.Rotate90FlipNone:  private void Button1_Click(System.Rotate180FlipY).Image = bitmap1.Object sender.System. } } .

Image Information Kiểu Size int int float float SizeF Thuộc tính Size Width Height HorizontalResolution VerticalResolution PhysicalDimension Khả năng truy cập get get get get get get Mô tả In dots per inch In dots per inch In hundredths of millimeters .

Picture Box . Save. UnlockBits. Animation.Bitmap     Dẫn xuất từ lớp Image Cho phép developer/user thao tác đồ họa ở cấp độ bit Bitmap Methods: Clone. SetPixel Icons. SetResolution. GetPixel. MakeTransparent. FromHicon. LockBits. GetHbitmap. GetHicon. SaveAdd.System.Drawing.

PixelFormat pf) (int cx. int cx. Graphics grfx) (int cx. int cxRowBytes. pBytes) . int cy.System. string strResource) (Image image) //Tạo một bitmap từ một đối tượng image (Image image. bool bUseImageColorManagement) (Stream stream) (Stream stream. int cy) //Tạo một bitmap không có dữ liệu ảnh (int cx. int cy) (int cx. PixelFormat pf. Size size) //Tạo một bitmap với size (Image. bool bUseImageColorManagement) (Type type. int cy. int cy.Bitmap (tt)   Lớp Image không có constructor Lớp Bitmap có 12 constructors             Bitmap Bitmap Bitmap Bitmap Bitmap Bitmap Bitmap Bitmap Bitmap Bitmap Bitmap Bitmap IntPtr (string strFilename) //Tạo một bitmap từ một file (string strFilename.Drawing.

PixelFormat)  Creates a copy of the section of this Bitmap defined by Rectangle structure and with a specified PixelFormat enumeration. (Inherited from Image) Clone() Clone(Rectangle.  GetHbitmap Method: Tạo một đối tượng GDI bitmap từ một bitmap. Creates a copy of the section of this Bitmap defined with a specified PixelFormat enumeration. Tên Mô tả Creates an exact copy of this Image. Vd: GetHbitmap(). PixelFormat) Clone(RectangleF. GetHbitmap(Color) SetResolution(float xDpi.Bitmap Methods  Clone Method: Tạo ra một bản sao của phần bitmap được định nghĩa với một PixelFormat cụ thể. float yDpi) .

200. 260). Bitmap bmpMonument = new Bitmap("monument. } .Graphics. e. 0). bmpMonument.DrawImage(bmpMonument. PaintEventArgs e) { Bitmap bmpBuilding = new Bitmap("building.MakeTransparent().Bitmap Method: Make Tranparent  private void Form1_Paint(object sender.DrawImage(bmpBuilding. 0.Graphics. e.bmp").bmp").

Bitmap Method: Make Tranparent (tt)  private void Form1_Paint(object sender.DrawImage(bmpGlobe. e.DrawImage(bmpFlying. PaintEventArgs e){ Bitmap bmpFlying = new Bitmap("flying.Graphics. 0. 20. } . 120).MakeTransparent(Color.Black).Graphics. Bitmap bmpGlobe = new Bitmap("globe. bmpGlobe. 0).bmp"). e.bmp").

int type. GetHicon  FromHicon: Creates a Bitmap from a Windows handle to an icon  [System.Runtime.dll". // Create a Bitmap object from the icon handle. 0. 1. int width.dll".ico".DrawImage(iconBitmap. int load).Runtime.InteropServices. 0.Bitmap Method: FromHicon. e. IntPtr Hicon = LoadImage(0.DllImportAttribute("user32. "smile. // Draw the Bitmap object to the screen. 0).FromHicon(Hicon). .Unicode)] private static extern IntPtr LoadImage(int Hinstance.  [System. 0.InteropServices.}  GetHicon: Returns the handle to an icon. CharSet = CharSet. private void Hicon_Example(PaintEventArgs e) { // Get a handle to an icon.Auto)] extern static bool DestroyIcon(IntPtr handle). int height. Bitmap iconBitmap = Bitmap. string name.DllImport("user32.Graphics. CharSet = CharSet. 16).

// Draw myBitmap to the screen. IntPtr Hicon = myBitmap.jpg"). // Get an Hicon for myBitmap. 0. GetHicon (tt)  private void GetHicon_Example(PaintEventArgs e) { // Create a Bitmap object from an image file. Icon newIcon = Icon. // Set the form Icon attribute to the new icon. } .FromHandle(Hicon). 0). since the form creates // its own copy of the icon accessible through the Form. // Create a new icon from the handle.DrawImage(myBitmap.Handle).GetHicon().Icon property. e. Bitmap myBitmap = new Bitmap(@"c:\FakePhoto. // You can now destroy the icon.Icon = newIcon.Bitmap Method: FromHicon. DestroyIcon(newIcon. this.Graphics.

Graphics. rgbValues.Abs(bmpData. int bytes = Math. // Create a new bitmap.} .Copy(ptr.Bitmap Method: LockBits. // Unlock the bits.Height). ptr. A 24bpp bitmap will look red.Copy(rgbValues. UnlockBits  Locks/Unlocks a Bitmap into system memory Using System. IntPtr ptr = bmpData. System. 0. // Get the address of the first line.LockBits(rect. BitmapData bmpData = bmp.Drawing. counter += 3) rgbValues[counter] = 255. // Set every third value to 255. // Lock the bitmap's bits.InteropServices. bmp.Runtime. 0.Marshal.Scan0. bytes). byte[] rgbValues = new byte[bytes].Runtime. Rectangle rect = new Rectangle(0.Length. bmp. // Draw the modified image.InteropServices. // Copy the RGB values back to the bitmap System.jpg").UnlockBits(bmpData). // Copy the RGB values into the array. e. bmp.Width. counter < rgbValues. for (int counter = 2.Height.DrawImage(bmp.Stride) * bmp. bmp. 150).ReadWrite.PixelFormat).Marshal. 0. // Declare an array to hold the bytes of the bitmap. ImageLockMode. 0. bytes).Imaging private void LockUnlockBitsExample(PaintEventArgs e) { Bitmap bmp = new Bitmap("c:\\fakePhoto.

Bitmap Method: Save. SaveAdd Save(String) Save(Stream.) SaveAdd(Image. EncoderParameters) .) Adds a frame to the file or stream specified in a previous call to the Save method.(Inherited from Image. EncoderParameters) Save(String.(Inherited from Image. ImageCodecInfo.) Saves this Image to the specified file. EncoderParameters) SaveAdd(Encoder Parameters) Saves this Image to the specified file or stream. (Inherited from Image) Saves this image to the specified stream. with the specified encoder and image-encoder parameters. ImageFormat) Save(Stream. ImageCodecInfo. Use this method to save selected frames from a multipleframe image to another multiple-frame image. (Inherited from Image) Saves this Image to the specified file in the specified format.) Adds a frame to the file or stream specified in a previous call to the Save method. (Inherited from Image) Saves this image to the specified stream in the specified format. (Inherited from Image. (Inherited from Image. ImageFormat) Save(String. with the specified encoder and image encoder parameters.

Ycount++) { myBitmap. Color pixelColor = myBitmap. Ycount. myBitmap. 0.jpg").SetPixel(Xcount.Height). // Create a Bitmap object from a file.Height). // Get the color of a pixel within myBitmap. myBitmap.}} // Draw myBitmap to the screen again. 0.DrawImage(myBitmap. color. myBitmap. Bitmap myBitmap = new Bitmap(GetType().Graphics.GetPixel(100. e.DrawImage(myBitmap. // Draw myBitmap to the screen. Xcount < 400. .Bitmap Method: GetPixel. int y. SetPixel   public Color GetPixel( int x. int y ): Gets the color of the specified pixel in this Bitmap. 0. public void SetPixel( int x. 300). pixelColor). myBitmap.Width.Graphics. Ycount < 400. e. myBitmap.Width.Width. Xcount++) { for (int Ycount = 100. Color color ): Sets the color of the specified pixel in this Bitmap. "download (5). // Set pixel in custom area in myBitmap to Get pixel 's for (int Xcount = 100.

SetPixel (tt) .Bitmap Method: GetPixel.

cursor trong Solution Explorer (thuộc project).được lưu trữ trong những file thực thi được coi là resources Icons. từ cửa sổ properties.Binary Resources     Nhúng các icons và con trỏ vào trong phần mềm.cụ thể là bitmaps. tại thuộc tính Build Action. Picturebox Visual C#. Để thêm một binary resource vào chương trình: Project. Những file . Animation. icon.NET cho phép tạo binary Resources bằng cách sử dụng một trình chỉnh sửa hình ảnh. (Bitmap File/ Cursor File/ Icon File). icons. Add New Item. con trỏ . thay đổi thành Embedded Resource . Hoặc khi chọn bất kỳ file bitmap. Image List.

int cx. Size size) Icon (Icon icon.}}    .ProgramWithIcon. int cy)  Graphics Methods Void DrawIcon (Icon icon. string strResource) class ProgramWithIcon: Form { public ProgramWithIcon() { Icon = new Icon(typeof(ProgramWithIcon).Binary Resources (tt)  Icon constructors    Icon (Type type. int x. string strResource) Icon (Icon icon.ico"). int y)  Void DrawIcon (Icon icon. Rectangle rect) Cursor (Type type. Rectangle rect)  Void DrawIconUnstretched (Icon icon. "ProgramWithIcon.

. class Wink: Form { protected Image[] aimage = new Image[4].Animation    Sử dụng kiểu dữ liệu Timer và phương thức TimerOnTick Nạp một bộ ảnh vào một mảng để thực thi nhanh hơn Vd: wink.cs Chương trình wink.cs nạp 4 ảnh trên qua resources và sử dụng sự kiện timer để hiển thị winking eye. protected int iImage = 0. iIncr = 1.

png"). ResizeRedraw = true. i < 4.Tick += new EventHandler(TimerOnTick). Timer timer = new Timer(). } . for (int i = 0. "Wink.Animation (p2) public Wink() { Text = "Wink".Enabled = true. BackColor = Color. timer. timer. timer. i++) aimage[i] = new Bitmap(GetType().Interval = 100.White.Eye" + (i+1) + ".

Animation (p3) protected virtual void TimerOnTick(object obj. grfx. grfx. if (iImage == 3) iIncr = -1. else if (iImage == 0) iIncr = 1.DrawImage(aimage[iImage].Width.Dispose().Height). iImage += iIncr. EventArgs ea) { Graphics grfx = CreateGraphics().Height) / 2. } } .Height aimage[iImage]. (ClientSize. aimage[iImage]. (ClientSize. aimage[iImage].Width) / 2.Width aimage[iImage].

cxTotal. Kiểm soát bằng các biến trạng thái.Tick += new EventHandler(TimerOnTick).Interval = iTimerInterval. // In milliseconds const int iBallSize = 16. BackColor = Color. public Bounce() { Text = "Bounce".}  .Animation (p4) Để tạo animation: ta vẽ lại toàn bộ form theo tốc độ nhất định. // As fraction of client area const int iMoveSize = 4. OnResize(EventArgs. int cxRadius. cyMove.Start(). Vd: bounce. yCenter. cyRadius. Timer timer = new Timer(). cxMove. cyTotal. // As fraction of ball size Bitmap bitmap. ResizeRedraw = true.White. timer. timer. int xCenter. timer.cs class Bounce: Form { const int iTimerInterval = 25.Empty).

cyTotal = 2 * (cyRadius + cyMove). cxRadius = (int) (fRadius * grfx.FromImage(bitmap). cxRadius / iMoveSize). cyTotal).Dispose(). 2 * cxRadius. grfx. 2 * cyRadius)).DpiY). cyRadius = (int) (fRadius * grfx.Clear(BackColor). cyRadius / iMoveSize).Width / 2.Clear(BackColor).Height / 2.Animation (p5) protected override void OnResize(EventArgs ea) { Graphics grfx = CreateGraphics(). . float fRadius = Math. DrawBall(grfx.DpiY) / iBallSize.DpiX). xCenter = ClientSize.Height / grfx. grfx = Graphics. cxTotal = 2 * (cxRadius + cxMove). cyMove = Math. ClientSize. } yCenter = ClientSize. bitmap = new Bitmap(cxTotal. new Rectangle(cxMove. grfx. cyMove.Max(1. grfx.DpiX.Width / grfx.Min(ClientSize. grfx. cxMove = Math.Max(1.Dispose().

Rectangle rect) { grfx.Red. EventArgs ea) { Graphics grfx = CreateGraphics().cyRadius <= 0)) cyMove = -cyMove.cxRadius <= 0)) cxMove = -cxMove.FillEllipse(Brushes.Width) || .Dispose(). cyTotal).DrawImage(bitmap. } } . xCenter += cxMove.cxTotal / 2. (xCenter if ((yCenter + cyRadius >= ClientSize.Height) || (yCenter . cxTotal. grfx. rect). grfx. if ((xCenter + cxRadius >= ClientSize. yCenter cyTotal / 2. xCenter . yCenter += cyMove. } void TimerOnTick(object obj.Animation (p6) protected virtual void DrawBall(Graphics grfx.

AutoSize.com/en/vcsharp/applicationdesig n/Lesson11. Fix3D Normal. CenterImage Description PictureBoxSizeMode  Các bạn có thể tham khảo thêm ở: http://www.yevol.htm .Picture Box   Another image-related control Descended from Control Type image BorderStyle Property image borderStyle SizeMode Accessibility get/set get/set get/set None. StretchImage. FixedSingle.

khó quản lý.Sprite    Mỗi bitmap một frame => Nạp hình nhiều lần.. => Dùng một hình lớn chứa nhiều hình nhỏ kích thước bằng nhau (sprites) Hàm DrawImage cho phép vẽ một phần hình chữ nhật của image lên Graphic Cách extract frames từ animated GIF files ………. .

} .FileName).Height).OK) { img = Image. private void openToolStripMenuItem_Click(object sender.Width.SelectActiveFrame(dimension. img. for (int i = 0.Image = img. FrameDimension dimension.Width * frameCount.0.GetFrameCount(dimension).FromFile(openFileDialog1. frameCount = img. int xPos = 0.FrameDimensionsList[0]).xPos. i++){ img.Width. pictureBox1. int frameCount.Sprite (p2) Image img. EventArgs e){ if (openFileDialog1. Bitmap bmp.Height).ShowDialog() == DialogResult. i < frameCount. img.FromImage(bmpp). xPos += img.i).}} Bitmap makeSpriteSheet(){ Bitmap bmpp = new Bitmap(img. dimension = new FrameDimension(img. Graphics g = Graphics. img.} return bmpp. g.DrawImage(img.

Sprite (p3) .

Tick += new EventHandler(timer_Tick).Height).ClientSize. // Lấy ảnh sprite index = 0. // Số thự tự của frame private int curFrameColumn. // Khởi tạo một đồng hồ timer. // Tạo back buffer backBuffer = new Bitmap(this. timer = new Timer().AllPaintingInWmPaint.ClientSize. graphics = this. // dòng hiện tại của frame public Form1() { InitializeComponent().Enabled = true.CreateGraphics(). timer. // cột hiện tại của frame private int curFrameRow. this.png").Sprite (p4) Vd sử dụng sprite private Bitmap sprite. // Bitmap dùng cho ảnh sprite private Bitmap backBuffer.Width. } . private int index. true). timer. "sprite2. public Graphics graphics. SetStyle(ControlStyles. // Back buffer private Timer timer. sprite = new Bitmap(GetType().Interval = 30.

EventArgs e) { Render(). // Xác dịnh số dòng. // Tăng thứ tự frame để lấy frame tiếp theo if (index > 16 * 16) index = 0. 0. 0).Dispose().DrawImage(sprite. graphics. curFrameRow * 128. // Vẽ lên màn hình } .DrawImageUnscaled(backBuffer. 128). 40.Sprite (p5) private void Render() // Vẽ một phần của ảnh sprite { // Lấy đối tượng graphics để vẽ lên back buffer Graphics g = Graphics. GraphicsUnit. // Vẽ lên buffer g. curFrameRow = index / 6. new Rectangle(curFrameColumn *128.Pixel).White). else index++. cột của một frame trên ảnh sprite curFrameColumn = index % 6. index++. 40. } private void timer_Tick(object sender. g. g. 128.Clear(Color.FromImage(backBuffer).

Lợi thế quan trọng nhất của việc sử dụng ma trận là tất cả các thao tác biến đổi màu sắc có thể thực hiện bằng phép nhân ma trận chuẩn.Matrix Nhắc lại: Ma trận là một bảng 2 chiều. và tốc độ thực thi.  Nhắc lại: Phép nhân tích vô hướng 2 ma trận: Amn x Bnp= Cmp Trong đó : Cij = tích vô hướng của (hàng i của A) và (cột j của B)  . mỗi ô là một số thực.  Bằng cách sử dụng ma trận ta có thể thực hiện các thao tác biến đổi hệ trục. biến đổi màu sắc của hình ảnh.

1) = 2*1 + 3*3 = 11 .Matrix 2 4 6 A 3 5 7 x 1 3 B 2 4 11 = C C(1.

sau cùng nhân ma trận của điểm và ma trận tích  Như vậy vẫn phải nhân nhiều lần???? Đừng quên: một hình có nhiều điểm  .  Để làm 100 phép biến đổi cùng lúc.Matrix Tại sao dùng nhân ma trận mà không tính toán trực tiếp?  Ma trận có khả năng “ghép” nhiều phép biến đổi làm 1. chỉ cần tính tích của 100 ma trận biến đổi.

lật hình Giả sử A = (ai. thì hình B sẽ có ma trận đại diện là B = (bi.Matrix Ví dụ 1: Xoay.i) = AT (Ma trận chuyển vị của A).k-i+1) (k là độ dài cạnh của hình) . hình H sẽ có ma trận đại diện là H = (hi.j) = (aj.j) = (aj.j) là ma trận đại diện của hình A.

ta sẽ được hình trắng đen.Matrix Ví dụ 2: Biến ảnh màu thành ảnh đen trắng. Lấy giá trị trung bình 3 kênh màu (R – G –B) của tấm hình. . sau đó ta đem giá trị thu được đó gán cho 3 kênh màu.

Matrix Ví dụ 3: Median (trung vị) – bộ lọc dùng để giảm nhiễu .

yevol.Questions and Discussion  Tài liệu tham khảo:  Programming Microsoft Windows with C# Book and Code by Charles Petzold  Slide bài giảng năm 2012. stackoverflow.com .microsoft. msdn. thầy Phạm Thi Vương  http://www. codeproject.com.com.com.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->