Hầu như tất cả những smartphone sử dụng hệ điều hành Android đều rất dễ sử dụng, đơn giản trong tùy biến theo sở thích cá nhân, cũng như có rất nhiều ứng dụng để thỏa mãn nhu cầu của từn
Trang 1 LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn sâu sắc đến thầy giáo Th.S Bùi Anh Tú – bộ môn công nghệ phần mềm đã định hướng và tận tình giúp đỡ, động viên em trong quá trình thực hiện đồ án Em xin chân thành cảm ơn thầy!
Em xin cảm ơn những người bạn và gia đình đã động viên, giúp đỡ để em phấn đấu vượt qua khó khăn trong quá trình học tập và rèn luyện tại Trường Đại học Công nghệ Thông tin và Truyền thông
Đồ án tốt nghiệp là cơ hội để em có thể áp dụng, tổng kết lại những kiến thức mà mình được học Đồng thời, em rút ra được những kinh nghiệm thực tế và quý giá trong suốt quá trình thực hiện đồ án Sau một thời gian khá dài, em tập trung công sức cho đồ án và làm việc tích cực, đặc biệt nhờ sự chỉ đạo và hướng dẫn tận tình của thầy Bùi Anh Tú cùng với các thầy cô trong trường Đại học Công nghệ thông tin và truyền thông – Đại học Thái Nguyên, đã giúp em hoàn thành đồ
án một cách thuận lợi và gặt hái được những kết quả như mong muốn
Cuối cùng, em xin cảm ơn tất cả thầy cô giáo Trường Đại học Công nghệ Thông tin và Truyền thông đã dạy dỗ, chỉ bảo những kiến thức, tri thức khoa học
và những bài học kinh nghiệm trong suốt quá trình học tập, rèn luyện tại trường, đề
em chuẩn bị thật tốt kiến thức và hành trang trong cuộc sống
Kính chúc quý thầy cô mạnh khỏe, tiếp tục đạt được nhiều thắng lợi trong nghiên cứu khoa học và sự nghiệp trồng người
Em xin chân thành cảm ơn!
Sinh viên
Hoàng Duy Hoàng
Trang 2 LỜI CAM ĐOAN
Em xin cam đoan toàn bộ nội dung trong đồ án này là do tự em đọc và nghiên cứu các tài liệu, khảo sát các phần mềm hiện nay Từ đó viết ra cơ sở lý
thuyết và xây dựng chương trình “Ứng dụng chỉnh sửa ảnh trên nền tảng Android”.
Mọi nguồn tham khảo, trích dẫn trong đồ án đều được ghi rõ nguồn gốc
Người cam đoan
Hoàng Duy Hoàng
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH MỤC HÌNH 6
MỞ ĐẦU 8
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 10
1.1 Tổng quan về hệ điều hành android 10
1.1.1 Đặc điểm 11
1.1.2 Kiến trúc tổng quát của hệ điều hành Android 13
1.1.3 Chu kỳ ứng dụng android 16
1.2 Các thành phần giao diện trong android 17
1.2.1 View 17
1.2.2 ViewGroup 17
1.2.3 LinearLayout 18
1.2.4 FrameLayout 18
1.2.5 AbsoluteLayout 18
1.2.6 RetaliveLayout 18
1.2.7 TableLayout 19
1.2.8 ImageView 19
1.2.9 ListView 19
1.2.10 TextView 20
1.2.11 EditText 20
1.3 Activity và Intent 21
1.3.1 Activity 21
Trang 41.3.2 Intent 21
1.4 Tìm hiểu về bitmap 23
1.4.1 Bitmap trong Android 23
1.4.2 Màu sắc trong Android 23
1.4.3 Thao tác với điểm ảnh trong bitmap 24
1.5 Một số thuật toán xử lý ảnh trong android 25
1.5.1 Convolution matrix 25
1.5.2 Neon 27
1.5.3 Emboss 28
1.5.4 TV Screen 28
1.5.5 Sketch 29
1.5.6 Invert 29
1.5.7 Smoothing 29
1.5.8 Gaussian blue 29
1.5.9 Grayscale 30
1.5.10 Sharpen 30
1.5.11 Color lighten 31
CHƯƠNG 2: KHẢO SÁT VÀ PHÂN TÍCH THIẾT KẾ HỆ THỐNG 32
2.1 Khảo sát thực tế 32
2.2 Đặc tả bài toán 32
2.3 Đặc tả chức năng 33
2.3.1 Chức năng load ảnh 33
2.3.2 Chức năng xử lý ảnh 33
2.4 Các biểu đồ hệ thống 35
2.4.1 Biểu đồ use case 35
2.4.2 Biểu đồ trình tự 38
2.4.3 Biểu đồ hoạt động 39
2.4.4 Biểu đồ class 40
Trang 52.5 Luồng sự kiện 42
2.5.1 Luồng sự kiện cho chức năng load ảnh 42
2.5.2 Luồng sự kiện chức năng edit 43
2.5.3 Luồng sự kiện chức năng styles 43
2.5.4 Luồng sự kiện chức năng text 43
2.5.5 Luồng sự kiện chức năng stickers 44
2.5.6 Luồng sự kiện cho các chức năng share, save, wallpaper 44
CHƯƠNG 3: DEMO ỨNG DỤNG 45
3.1 Một vài hình ảnh của ứng dụng 45
3.2 Danh sách các màn hình 52
KẾT LUẬN 54
TÀI LIỆU THAM KHẢO 55
Trang 6DANH MỤC HÌNH
Hình 1.1-2 Hệ điều hành Android 10
Hình 1.3 Kiến trúc tổng quát 13
Hình 1.4 Tầng ứng dụng 13
Hình 1.5 Application Framework 14
Hình 1.6 Libraries 14
Hình 1.7 Android Runtime 15
Hình 1.8 Linux kernel 15
Hình 1.9 Chu kỳ sống thành phần 16
Hình 1.10 Chu kỳ sống của Activity 16
Hình 1.11 Bố trí các widget sử dụng LinearLayout 18
Hình 1.12 Bố trí trong RelativeLayout 19
Hình 1.13 Minh hoạ cho một ListView 20
Hình 1.14 Truyền dữ liệu giữa 2 Activity 22
Hình 1.15 Các thuộc tính của Intend 22
Hình 1.16 Các Action đã được định nghĩa sẵn trong Intend 22
Hình 1.17 Công thức xử lý ảnh ma trận nhân chập 25
Hình 1.18 Công thức ma trận nhân chập 27
Hình 1.19 Mô tả ảnh neon 27
Hình 1.20 Mô tả ảnh Emboss 28
Hình 1.21 Mô tả hiệu ứng Shapen 30
Hình 2.1 Quá trình xử lý một bức ảnh 34
Hình 2.2 biểu đồ use case tổng quát 35
Hình 2.3 Biểu đồ usecase edit 36
Hình 2.4 Biểu đồ usecase Styles 36
Hình 2.5 Biểu đồ usecase Stickers 37
Hình 2.6 Biểu đồ usecase text 37
Trang 7Hình 2.7 Biểu đồ trình tự chức năng load ảnh 38
Hình 2.8 Biểu đồ trình tự chức năng xử lý ảnh 38
Hình 2.9 Biểu đồ hoạt động cho chức năng load ảnh 39
Hình 2.10 Biểu đồ hoạt động cho chức năng xử lý ảnh 39
Hình 2.11 Biểu đồ class tổng quát 40
Hình 2.12 Biểu đồ class edit 40
Hình 2.13 Biểu đồ class Text 41
Hình 2.14 Biểu đồ class Sticker 41
Hình 2.15 Biểu đồ class Style 42
Hình 3.1 Màn hình chức năng load ảnh 45
Hình 3.2 Màn hình hiển thị ảnh và các chức năng xử lý ảnh 46
Hình 3.3 Tạo hiệu ứng Neon 47
Hình 3.4 Tạo hiệu ứng Pseudo HDR 47
Hình 3.5 Chọn các filter cho bức ảnh 48
Hình 3.6 Tăng giảm độ sáng 48
Hình 3.7-8 Chọn các stickers cho bức ảnh 49
Hình 3.9-10 Chọn background và frame cho ảnh 50
Hình 3.11-12 Nhập văn bản và chọn màu chữ 51
Hình 3.13-14 Share và save ảnh 52
Trang 8 MỞ ĐẦU
Ngày nay, hệ điều hành Android ra đời và trở thành nền tảng điện thoại thông minh phổ biến nhất thế giới, với sự kế thừa những ưu việt của các hệ điều hành ra đời trước và sự kết hợp của nhiều công nghệ tiên tiến nhất hiện nay Những ưu điểm dễ thấy nhất của Android chính là khả năng tùy biến nhanh chóng,
dễ làm quen, ứng dụng hỗ trợ phong phú, tương thích với đa cấu hình phần cứng của các nhà sản xuất Dù đã hay chưa từng sử dụng smartphone Android thì ta cũng không cần quá lo lắng về việc thay đổi Hầu như tất cả những smartphone sử dụng hệ điều hành Android đều rất dễ sử dụng, đơn giản trong tùy biến theo sở thích cá nhân, cũng như có rất nhiều ứng dụng để thỏa mãn nhu cầu của từng người dùng Đồng thời Android có mã nguồn mở đã cho phép các nhà phát triển thiết bị, mạng di động và các lập trình viên được điều chỉnh và phân phối Android một cách tự do
Cùng với sự phát triển không ngừng của công nghệ thông tin, các siêu phẩm điện thoại thông minh ra đời, các thiết bị di động như điện thoại, máy tính bảng, máy nghe nhạc, selfie ngày càng phát triển mạnh mẽ, tạo nên cuộc cạnh tranh giữa các hãng phát triển di động Ngày càng nhiều sản phẩm di động thông minh ra đời được nâng cấp và cải thiện rất lớn về hiệu suất cũng như cấu hình cao đáp ứng nhu cầu của người sử dụng
Bên cạnh những chức năng quan trọng của một chiếc smartphone, một chức năng cũng không thể thiếu đó là chiếc camera chụp ảnh, để lưu trữ lại những kỷ niệm đẹp, những khoảnh khắc ý nghĩa Những chiếc smartphone ngày càng được cải thiện cả về tính năng lẫn chất lượng phần cứng, camera trên điện thoại cũng ngày một hoàn thiện hơn, áp dụng những công nghệ xử lý ảnh tiên tiến để cho ra những bức ảnh đẹp và trân thực nhất, đáp ứng nhu cầu chụp ảnh, selfie với chất lượng hình ảnh cao
Tuy nhiên, những chiếc camera mặc định của điện thoại thường chỉ cho ra
Trang 9những hình ảnh thô và không làm hài lòng người sử dụng, đôi khi họ muốn biến những bức ảnh kém nổi bật sau khi chụp trở nên lung linh và sắc nét hơn, với những hiệu ứng biến đổi màu sắc, hiệu ứng khung ảnh, làm cho bức ảnh trở nên khác biệt Và họ cần một ứng dụng khác biệt có thể thay thế ứng dụng mặc định
mà hệ điều hành cung cấp có thể tùy chỉnh bức ảnh sau khi chụp theo sở thích của mỗi người
Bởi vậy trước nhu cầu và lợi thế đó, em quyết định nghiên cứu và xây dựng
ứng dụng: “Xây dựng ứng dụng chỉnh sửa ảnh trên nền tảng android.”
Ứng dụng có thể cho phép mọi người chỉnh sửa các hiệu ứng, biển đổi tăng sáng tối cho bức ảnh, có thể tạo style, thêm text hoặc các sticker ngộ nghĩnh cho bức ảnh Bên cạnh đó sau khi xử lý ảnh xong, người dùng có thể chia sẻ lên mạng
xã hội, tạo wallpaper cho điện thoại của mình
Nội dung báo cáo gồm các phần chính sau đây:
Chương 1: Cơ sở lý thuyết
Chương 2: Khảo sát và phân tích thiết kế hệ thống
Chương 3: Demo ứng dụng
Trong quá trình xây dựng đề tài không thể tránh được những thiếu sót, em mong được những ý kiến đóng góp, phê bình của các thầy, cô để bài của em được hoàn thiện hơn Sự phê bình, góp ý của quý thầy cô sẽ là nhưng bài học kinh nhiệm quý báu cho công việc thực tế của em sau này
Em xin trân thành cảm ơn!
Sinh viên
Hoàng Duy Hoàng
Trang 10 CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
Tổng quan về hệ điều hành android.
Hình 1.1-2 Hệ điều hành Android
Android là nền tảng phần mềm dựa trên mã nguồn mở Linux OS (Kernel 2.6) được thiết kế dành riêng cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh hay máy tính bảng, nhằm xây dựng các ứng dụng hỗ trợ mà người sử dụng cần đến
Được xây dựng trên một nền tảng mở, và một bộ thư viện đa năng, mạnh
mẽ với nguyên lý mở, Android đã nhanh chóng được cộng đồng lập trình viên di
Trang 11động hưởng ứng mạnh mẽ
Nền tảng Android tích hợp nhiều tính năng nổi bật:
Android là một hệ điều hành nhân Linux, đảm bảo sự tương tác với các phần cứng, quản lý bộ nhớ, điều khiển các tiến trình tối ưu cho các thiết bị di động
Bộ ứng dụng khung cho phép sử dụng lại và thay thế các thành phần riêng lẻ
Máy ảo Dalvik được tối ưu cho các thiết bị di động, chạy các ứng dụng lập trình trên ngôn ngữ Java
Các thư viện cho phát triển ứng dụng mã nguồn mở bao gồm SQLite, WebKit, OpenGL và trình quản lý đa phương tiện
Hỗ trợ các chuẩn đa phương tiện phổ biến, thoại trên nền GSM, Bluetooth EDGE, 3G và Wifi
Hỗ trợ Camera, GPS, la bàn, máy đo gia tốc…
Bộ phát triển ứng dụng SDK đầy đủ gồm thiết bị giả lập, công cụ sửa lỗi, tích hợp với Eclipse SDK
di động hoàn hảo
Tính ngang hàng của các ứng dụng
Với Android, không có sự khác nhau giữa các ứng dụng điện thoại cơ bản với ứng dụng của bên thứ ba Chúng được xây dựng để truy cập như nhau tới một
Trang 12loạt các ứng dụng và dịch vụ của điện thoại Với các thiết bị được xây dựng trên nền tảng Android, người dùng có thể đáp ứng đầy đủ các nhu cầu mà họ thích Chúng ta có thể đổi màn hình nền, kiểu gọi điện thoại, hay bất kể ứng dụng nào Chúng ta thậm chí có thể hướng dẫn điện thoại chỉ xem những ảnh mình thích.
Dễ xây dựng ứng dụng
Android cung cấp bộ thư viện giao diện lập trình ứng dụng đồ sộ và các công cụ để viết các ứng dụng phức tạp Ví dụ, Android có thể cho phép người phát triển biết được vị trí của thiết bị và cho phép các thiết bị giao tiếp với nhau để có thể tạo nên mạng xã hội chia sẻ ngang hàng rộng khắp
Trang 13So sánh với các hệ điều hành cùng loại khác:
Bảng 1.1 So Sánh Các Hệ Điều Hành Điện Thoại Thông Minh
Android
Google Android là nền tảng mở, cho phép người dùng có thể tùy biến nền tảng theo ý thích, hơn nữa lại có một Liên minh thiết bị cầm tay mở hậu thuẫn, Google Android đang là đối thủ xứng tầm của iPhone của Apple
Google đang tích cực mở rộng cộng đồng phát triển các ứng dụng cho Android Bộ công cụ phát triển phần mềm (SDK) đầy đủ, hỗ trợ đa nền (Linux, Windows hay Mac OS) do chạy trên máy ảo Java Thư viện ngày càng hoàn thiện, dễ dàng cho người lập trình
Hệ điều hành phân mảnh, không thống nhất trên các thiết bị, giới hạn về độ 'mở' và nhiều
lỗ hổng bảo mật là những yếu điểm của Android OS
Windows
Phone
Có thư viện API khá giống với API trên Win32, các công cụ hỗ trợ lập trình đầy đủ với Visual Studio, điều này làm cho những người phát triển trên Win32 không mất công tìm hiểu lại các API và các công cụ lập trình
Sự có mặt của iPhone
và Android là hai trở ngại lớn với Windows Mobile Hai nền tảng này đang hoàn thiện và được người dùng rất ưa chuộng
Trang 14Màn hình cảm ứng đa điểm: iPhone
sử dụng hoàn toàn bằng cảm ứng và không sử dụng các nút Với iPhone ta
có thể điều khiển trên màn hình kể cả việc trượt của các ngón tay Ta có thể phóng to ảnh bằng cách trượt hai ngón tay ra xa và thu nhỏ bằng cách ngược lại
Bộ cảm nhận gia tốc: Những phản
ứng nhanh chóng của bộ cảm nhận gia tốc thay đổi độ phân giải màn hình từ dọc sang ngang tự động khi ta đặt điện thoại nằm ngang Điều này làm sinh động thêm cho các trò chơi Âm thanh, hình ảnh hoàn hảo
Việc lập trình trên cho iPhone phải thực hiện trên hệ điều hành Mac,
do đó không phải ai cũng có thể lập trình cho iPhone Hơn thế, nếu muốn đưa chương trình ra máy thật người lập trình phải trả một khoản phí lập trình, điều này làm giảm tính cạnh tranh so với các đối thủ khác
Kiến trúc tổng quát của hệ điều hành Android
Mô hình sau thể hiện môt cách tổng quát các thành phần của hệ điều hành Android
Trang 151.1.2.2 Application Framework
Trang 16Hình 1.5 Application Framework
Kiến trúc của Android khuyến khích khái niệm thành phần sử dụng lại, cho phép công bố và chia sẻ các Activity, Service, dữ liệu, với các ứng dụng khác với quyền truy cập được quản lý bởi khai báo
android.view: View là lớp giao diện người dùng cơ bản nhất Tất cả giao diện người dùng được tạo ra đều phải sử dụng một tập các View để cung cấp cho các thành phần tương tác người dùng
android.widget: Xây dựng dựa trên gói View Những lớp widget những thành phần giao diện được tạo sẵn được sử dụng để tạo nên giao diện người dùng
android.telephony: Các API điện đàm cung cấp khả năng tương tác trực
Trang 17tiếp với tầng điện thoại trong các thiết bị, cho phép tạo, nhận, theo dõi các cuộc gọi, tình trạng các cuộc gọi và tin nhắn SMS.
Android Runtime
Hình 1.7 Android Runtime
Phần này chứa các thư viện mà một chương trình viết bằng ngôn ngữ Java
có thể hoạt động Phần này có 2 bộ phận tương tự như mô hình chạy Java trên máy tính thường Thứ nhất là các thư viện lỗi (Core Library), chứa các lớp như JAVA
IO, Collections, File Access Thứ hai là một máy ảo java(Dalvik Virtual Machine)
1.1.2.5 Linux Kernel
Android sử dụng nhân Linux 2.6 làm nhân cho các dịch vụ hệ thống như bảo mật, quản lý bộ nhớ, quản lý tiến trình (xử lý tiến trình, đa luồng), ngăn xếp mạng và trình điều khiển thiết bị (giao tiếp USB, giao tiếp hồng ngoại, không đây, v.v…) Nhân Linux này cũng có vai trò như một lớp trừu tượng giữa phần cứng và phần mềm
Trang 18 USB Driver : Điều khiển bàn phím.
Wifi Driver : Chịu trách nhiệm về việc thu phát sóng wifi
Audio Driver : Điều khiển các bộ thu phí phát âm thanh, giải mã các tính hiệu dạng audio thành tín hiệu số và ngược lại
Chu kỳ ứng dụng android
Chu kỳ sống thành phần
Các thành phần ứng dụng có một chu kỳ sống, tức là mỗi thành phần từ lúc bắt đầu khởi tạo và đến thời điểm kết thúc Giữa đó, đôi lúc chúng có thể là active hoặc inactive, hoặc là trong trường hợp activies nó có thể visible hoặc invisible
Hình 1.9 Chu kỳ sống thành phần.
Các trạng thái của chu kỳ sống
Trang 19Hình 1.10 Chu kỳ sống của Activity
Một Activity chủ yếu có 3 chu kỳ chính sau:
Active hoặc running: Khi Activity là được chạy trên màn hình Activity này tập trung vào những thao tác của người dùng trên ứng dụng
Paused: Activity là được tạm dừng (paused) khi mất focus nhưng người dùng vẫn trông thấy
Stopped: Nếu nó hoàn toàn bao phủ bởi Activity khác Nó vẫn còn trạng thái và thông tin thành viên trong nó
Chu kỳ sống của ứng dụng
Trong một ứng dụng Android có chứa nhiều thành phần và mỗi thành phần đều có một chu trình sống riêng Và ứng dụng chỉ được gọi là kết thúc khi tất cả các thành phần trong ứng dụng kết thúc Activity là một thành phần cho phép người dùng giao tiếp với ứng dụng Tuy nhiên, khi tất cả các Activity kết thúc và người dùng không còn giao tiếp được với ứng dụng nữa nhưng không có nghĩa là ứng dụng đã kết thúc Bởi vì ngoài Activity là thành phần có khả năng tương tác người dùng thì còn có các thành phần không có khả năng tương tác với người dùng như là Service, Broadcast receiver
1.1.3.3 Thời gian sống của ứng dụng
Bảy phương thức chuyển tiếp định nghĩa trong chu kỳ sống của một Activity Thời gian sống của một Activity diễn ra giữa lần đầu tiên gọi onCreate() đến trạng thái cuối cùng gọi onDestroy()
1.1.3.4 Thời gian hiển thị của Activity
Visible lifetime của một activity diễn ra giữa lần gọi một onStart() cho đến khi gọi onStop() Trong suốt khoảng thời gian này người dùng có thể thấy activity trên màn hình, có nghĩa là nó không bị foreground hoặc đang tương tác với người dùng
1.2 Các thành phần giao diện trong android
Trang 20ViewGroup thực ra chính là View hay nói đúng hơn thì ViewGroup chính
là các widget Layout được dùng để bố trí các đối tượng khác trong một screen
Trang 21 AbsoluteLayout
Layout này được sử dụng để bố trí các widget vào một vị trí bất kì trong layout dựa vào 2 thuộc tính toạ độ x, y Tuy nhiên, kiểu layout này rất ít khi được dùng bởi vì toạ độ của các đối tượng luôn cố định và sẽ không tự điều chỉnh được
tỷ lệ khoảng cách giữa các đối tượng
Trang 22 1.2.6 RetaliveLayout
Layout này cho phép bố trí các widget theo một trục đối xứng ngang hoặc dọc Để đặt được đúng vị trí thì các widget cần được xác định một mối ràng buộc nào đó với các widget khác
Hình 1.12 Bố trí trong RelativeLayout
1.2.7 TableLayout
Layout này được sử dụng khi cần thiết kế một table chứa dữ liệu hoặc cần
bố trí các widget theo các row và column Chẳng hạn như, giao diện của một chiếc máy tính đơn giản hoặc một danh sách dữ liệu
1.2.8 ImageView
Được dùng để thể hiện một hình ảnh Nó cũng giống như ImageButton, chỉ
Trang 23khác là không có hình dáng của một cái button
1.2.9 ListView
Được sử dụng để thể hiện một danh sách các thông tin theo từng cell Mỗi cell thông thường được load lên từ một file XML đã được cố định trên đó số lượng thông tin và loại thông tin cần được thể hiện
Để thể hiện được một list thông tin lên một screen thì cần phải có 3 yếu tố chính:
Data Source: Data Source có thể là một ArrayList, HashMap hoặc bất
kỳ một cấu trúc dữ liệu kiểu danh sách nào
Adapter: Adapter là một class trung gian giúp ánh xạ dữ liệu trong Data
Source vào đúng vị trí hiển thị trong ListView Chẳng hạn, trong Data Source có một trường name và trong ListView cũng có một TextView để thể hiện trường name này Tuy nhiên, ListView sẽ không thể hiển thị dữ liệu trong Data Source lên được nếu như Adapter không gán dữ liệu vào cho đối tượng hiển thị
ListView là đối tượng để hiển thị các thông tin trong Data Source ra
một cách trực quan và người dùng có thể thao tác trực tiếp trên đó
Trang 24Hình 1.13 Minh hoạ cho một ListView
Trang 25EditText Chẳng hạn như khi bạn muốn một ô để nhập password hay một ô để nhập Email thì thuộc tính này sẽ làm điều đó.
android:singleLine = “true” EditText của bạn sẽ trở thành một TextField, ngược lại sẽ là TextBox
1.3 Activity và Intent
1.3.1 Activity
Activity là một thành chính của một ứng dụng Android, được dùng để hiển thị một màn hình và nắm bắt các hoạt động xảy ra trên màn hình đó Khi làm việc với Activity cần nắm bắt được một số kiến thức cơ bản như sau:
Tính liên lạc giữa 2 activity
Khi chuyển sang một Activity khác ta có thể gửi kèm dữ liệu trong intend
1.3.2 Intent
Khái niệm Intend:
Trang 26 Là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của một Activity
Là cầu nối giữa các Activity: ứng dụng Android thường bao gồm nhiều Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc khác nhau Intent chính là người đưa thư, giúp các Activity có thể triệu gọi cũng như truyền các dữ liệu cần thiết tới một Activity khác Điều này cũng giống như việc di chuyển qua lại giữa các Forms trong lập trình Windows Form
Hình 1.14 Truyền dữ liệu giữa 2 Activity
Dữ liệu của Intend:
Intent về cơ bản là một cấu trúc dữ liệu, được mô tả trong lớp android.content.Intent
Các thuộc tính của một đối tượng Intend:
Trang 27Hình 1.15 Các thuộc tính của Intend
Các Action được định nghĩa sẵn:
Dưới đây là những hằng String đã được định nghĩa sẵn trong lớp Intent Đi kèm với nó là các Activity hay Application được xây dựng sẵn sẽ được triệu gọi mỗi khi Intent tương ứng được gửi
Hình 1.16 Các Action đã được định nghĩa sẵn trong Intend
Trang 28 Tìm hiểu về bitmap
Bitmap trong Android.
Lớp Bitmap là lớp thể hiện một bức ảnh trong hệ điều hành Android, chứa các thông tin và các phương thức cơ bản để có thể làm việc được với bức ảnh như đọc, ghi các điểm ảnh, lấy thông tin kích thước, … Được tạo thành từ sự sắp xếp các điểm ảnh, gọi là pixels, theo kiểu lát gạch hay ô lưới
Chất lượng ảnh Bitmap phụ thuộc vào độ phân giải của hình (đơn vị là ppi=pixels per inch), độ phân giải càng cao thì hình càng mịn và sắt nét nhưng sẽ nặng file và tốn tài nguyên máy Khi tăng giảm kích thước ảnh bitmap sẽ gây ra hiện tượng "bể" hình: các cạnh bị răng cưa và màu sắc bị phân mảng ô vuông
Đọc ảnh vào đối tượng Bitmap, cách đơn giản nhất là sử dụng lớp BitmapFactory decode file từ một đường dẫn đến ảnh trên thiết bị
Một đối tượng Bitmap chiếm dụng khá nhiều bộ nhớ, đặc biệt với các bức ảnh nhiều màu như ảnh chụp từ camera Ví dụ với camera 8 megapixels cho bức ảnh có kích thước 3264 x 2448 pixel Nếu Bitmap sử dụng cấu hình ARGB_8888 sau khi được đọc vào bộ nhớ có thể chiếm đến 30MB (3264*2448*4 bytes) bộ nhớ trong
Điều đó sẽ gây nên exception java.lang.OutofMemoryError: bitmap size exceeds VM budget
Một điều nữa là việc xử lý bitmap có kích thước lớn sẽ cần nhiều thời gian tính toán hơn bitmap có kích thước nhỏ Chính vì vậy ta cần một số thủ thuật để có thể làm việc với bitmap hiệu quả
Màu sắc trong Android
Trong hệ điều hành Android, lớp Color là lớp thể hiện một màu sắc, lớp này
có các thuộc tính và phương thức để làm việc với màu sắc Tuy vậy, màu sắc cũng được thể hiện là một số nguyên 4 bytes, vậy có tổng cộng 2^32 ≈ 16.7 triệu màu Mỗi màu 4 bytes tương ứng với 4 kênh Alpha – Red – Green – Blue, mỗi kênh sẽ
Trang 29chiếm 1 byte.
Để đọc giá trị của một kênh có thể dùng các toán tử thao tác với bit để cho tốc độ thực thi nhanh
1.4.3 Thao tác với điểm ảnh trong bitmap
Mỗi một điểm ảnh trên Bitmap là một số nguyên đại diện cho một màu mang giá trị của 4 kênh màu cơ bản Alpha, Red, Green, Blue Chúng ta sẽ đọc các điểm ảnh vào một mảng kiểu nguyên có kích thước bằng với số pixels của ảnh Các thuật toán xử lý ảnh sẽ xử lý trên mảng số nguyên đó sau đó lưu mảng kết quả trở lại Bitmap
Lớp Bitmap cung cấp hai phương thức:
Phương thức trên dùng để đọc toàn bộ điểm ảnh của một ảnh vào mảng số nguyên
Phương thức trên dùng để đặt lại giá trị màu các điểm ảnh từ một mảng số nguyên là mảng giá trị sau khi xử lý
Như vậy ta có thể viết một hàm xủ lý ảnh như sau với đầu vào là một Bitmap, đầu ra là một Bitmap khác đã qua xủ lý:
Một số thuật toán xử lý ảnh trong android
Trang 30Hình 1.17 Công thức xử lý ảnh ma trận nhân chập
Trang 32tô màu xanh lá của đèn neon cho nó còn lại nền là màu đen, như vậy ảnh thu được
sẽ có hiệu ứng đèn neon ở các biên của ảnh
Toán tử Sobel là 2 nhân chập có ma trận hệ số như sau:
Trong đó:
Hx dùng để phát hiện biên theo hướng ngang
Hy dùng để phát hiện biên theo hướng dọc
Trang 33 Emboss
Hình 1.20 Mô tả ảnh Emboss
Hiệu ứng emboss là một kỹ thuật trong đồ họa máy tính mà với mỗi điểm ảnh của ảnh gốc được thay thế bởi một điểm ảnh nổi bật hoặc một điểm ảnh chìm Vùng ảnh có độ tương phản thấp sẽ được thay thế bởi nền xám
Ảnh sau khi đi qua bộ lọc Emboss sẽ thể hiện tốc độ thay đổi màu tại mỗi nơi của ảnh gốc Nơi có tốc độ thay đổi màu thấp biến thành nền và nơi có tốc độ thay đổi màu cao biến thành các cạnh nổi Ảnh kết quả giống với việc dập nổi một
tờ giấy hoặc kim loại vì vậy hiệu ứng này có tên là dập nổi – emboss
Bản chất là dùng ma trận nhân chập với ma trận hệ số như sau:
Trang 34 TV Screen
Hiệu ứng màn hình TV CRT không dùng nhân chập hay bộ lọc mà dùng thuật toán riêng dưới đây để có được hiệu ứng biến bức ảnh thành các dòng điểm ảnh với ba màu đỏ, xanh lá, xanh da trời như trên một màn hình CRT
Thuật toán xử lý từng lượt 4 dòng từ trên xuống dưới, hay nói cách khác là
xử lý 4 điểm ảnh nằm trên 4 dòng liền nhau Đọc giá trị R, G, B của 4 điểm ảnh trên cộng lại từng màu sau đó chia cho 4, được giá trị R, G, B trung bình cho 4 điểm Tiếp theo lần lượt đưa giá trị R,G,B trên vào 3 dòng đầu, dòng 1 chỉ lấy giá trị R đưa vào điểm ảnh kết quả, các giá trị khác bằng 0, tương tự dòng 2 chỉ lấy giá trị G, dòng 3 chỉ lấy giá trị B, còn lại dòng 4 thì các điểm ảnh được giữ nguyên theo ảnh gốc Kết quả thu được giống như màn hình TV CRT
1.5.5 Sketch
Thuật toán tạo ảnh dạng vẽ chì thực hiện trên ảnh xám vì vậy cần chuyển ảnh về dạng ảnh xám trước khi xử lý Thuật toán sẽ tính toán trên 2 điểm ảnh, một điểm ảnh đang xét và một điểm ảnh nằm kề phía dưới bên phải điểm ảnh đang xét Chuyển 2 điểm ảnh về dạng ảnh đa mức xám, tính hiệu 2 giá trị đó nếu lớn hơn một ngưỡng cho trước thì đặt giá trị điểm ảnh đang xét là màu chì, ngược lại đặt màu nền là màu trắng
1.5.6 Invert
Thuật toán biến đổi âm bản chỉ dựa vào một điểm ảnh, không phụ thuộc các điểm ảnh xung quanh
Y(m,n) = L – X(m,n)
Với - Y(m,n) là giá trị mức xám kết quả của điểm ảnh sau biến đổi
- X(m,n) là giá trị mức xám ban đầu của điểm ảnh
- L là giá trị mức xám tối đa mà một điểm ảnh thể hiện (ảnh 8bit sẽ là 2^8
- 1 = 255)
1.5.7 Smoothing
Làm trơn ảnh hay làm mịn ảnh làm cho bức ảnh mịn hơn san những điểm
Trang 35ảnh nhiễu trong bức ảnh gần bằng với các điểm ảnh xung quanh Có thể áp dụng
bộ lọc trung bình hoặc áp dụng nhân chập dưới đây với hệ số factor là 15 và offset
là 1:
1.5.8 Gaussian blue
Gaussian blue là một loại bộ lọc(filter) làm mờ ảnh, xử dụng lý thuyết hàm Gaussian để tính toán việc chuyển đổi(transformation) mỗi điểm ảnh của hình, giúp làm giảm nhiễu và mức độ chi tiết(không mong muốn) của hình ảnh Đây là phương trình hàm Gaussian trong không gian một chiều:
Và trong không gian 2 chiều:
1.5.9 Grayscale
Ảnh xám hay còn gọi là ảnh đơn sắc (monochromatic) Ảnh 8 mức xám mỗi điểm ảnh sẽ có giá trị nằm trong đoạn [0-7], ảnh 256 mức xám mỗi điểm ảnh sẽ có giá trị nằm trong đoạn [0-255]
Giá trị của điểm ảnh bằng 0 đại diện cho điểm ảnh tối (đen), giá trị điểm ảnh lơn nhất đại diện cho điểm ảnh sáng (trắng)
Độ sáng được tính theo công thức: (chuyển đổi từ hệ màu RGB)
S = 0.2989R + 0.5870G + 0.1140B
1.5.10 Sharpen
Trang 36Làm sáng lên các chi tiết tốt trong ảnh hoặc tăng cường các chi tiết bị mờ Lấy vi phân ảnh ( tức lấy đạo hàm cấp 1, cấp 2) nhằm tăng cường mép ảnh và điểm gián đoạn khác.
Đạo hàm cấp 1 của hàm f(x) được định nghĩa như sau:
Trang 37 CHƯƠNG 2: KHẢO SÁT VÀ PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Các ứng dụng photowonder, camera360 là những cái tên rất quen thuộc đối với người dùng, trước những phản hồi thực tế từ người sử dụng thì việc tạo ra ảnh nghệ thuật kết hợp những khung ảnh và những hiệu ứng đặc biệt đang là vấn đề đáng quan tâm
Đặc tả bài toán
Tên đề tài: Xây dựng ứng dụng chỉnh sửa ảnh trên nền tảng Android
Nội dung bài toán yêu cầu xây dựng một ứng dụng bao gồm các chức năng chính sau:
Trang 38khi đã chỉnh sửa.
Trang 39 Edit: Các lựa chọn chỉnh sửa màu sắc, các hiệu ứng, các bộ lọc, điều chỉnh tăng sáng/tối cho ảnh
Trang 40 Style: Tùy chọn khung ảnh(frame), nền(background) và custom đường viền,
Thêm text mô tả vào ảnh
Thêm các stickers biểu tượng ngộ nghĩnh cho bức ảnh
Share, tạo ảnh nền, lưu bức ảnh lại sau khi đã xử lý
Hình 2.1 Quá trình xử lý một bức ảnh
Mô tả hoạt động:
Người dùng click vào button edit, một activity mới được tạo, màn hình hiển thị chức năng edit hiện lên, một Hlistview load các item lựa chọn:
Cân bằng màu sắc(enhance)
Các hiệu ứng (effect) sephia, tv screen, sketch, neon
Lựa chọn điều chỉnh sáng, tối, độ sắc nét cho bức ảnh
Các bộ lọc(filter) : Gaussian blur, emboss, sharpen, glow
Color Lighten: Chỉnh sửa màu sắc theo hệ màu RGB
Contrast: làm nổi bật khoảng màu sáng cho bức ảnh trở nên sắc nét giảm
độ nhiễu trên bức ảnh
Khi click vào button styles : giao diện Hlistview sẽ hiển thị các item để set