• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Tạo file ảnh thông qua save dialog !

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Điều hành viên: tungblt, vuathongtin

tranbadat
Thành viên chính thức
Thành viên chính thức
Bài viết: 44
Ngày tham gia: T.Năm 21/02/2013 9:50 pm
Has thanked: 22 time
Been thanked: 4 time

Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi tranbadat » T.Sáu 22/03/2013 7:25 pm

em đang làm 1 phần mềm tạo ảnh....
hiện tại em đang bí code cho phần xuất ảnh
form của em có 2 picture Box, mỗi box có một hình...
và một button tên là lưu
vậy có thể : nhấn nút "Lưu", nó sẽ hiện ra một hộp thoại save và save 1 file ảnh có đuôi *.jpg , file ảnh này đc tạo nên từ hai picturebox hơp lại đc không?
và nếu có thể thì code là gì ?
mình rất cảm ơn nếu có kết quả :x



chienhmu
Thành viên tích cực
Thành viên tích cực
Bài viết: 166
Ngày tham gia: T.Bảy 02/06/2012 4:37 pm
Đến từ: Bắc Ninh
Been thanked: 62 time

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi chienhmu » T.Sáu 22/03/2013 8:29 pm

Bạn xem thử cái này xem được chưa
Tập tin đính kèm
SaveImageExample.rar
(64.94 KiB) Đã tải 207 lần

tranbadat
Thành viên chính thức
Thành viên chính thức
Bài viết: 44
Ngày tham gia: T.Năm 21/02/2013 9:50 pm
Has thanked: 22 time
Been thanked: 4 time

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi tranbadat » T.Sáu 22/03/2013 10:18 pm

:) đc rồi bạn ạ
có gì mình sẽ hỏi bạn thêm
à mà nữa bạn ơi !
cái code

Mã: Chọn hết

 Try
            MergerImages(pic1.image,pic2.image)
        Catch
          end try

có tác dụng gì thế, và cái chữ "megerimages" ấy để làm gì ?
thêm nữa..: mình xài visual studio 2012
có lẽ có 1 số thay đổi về code, bằng chứng là cái code trên mình gõ vào nó không đc,bn giúp vs

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » T.Bảy 23/03/2013 8:23 am

"MergerImages" là sub ghép 2 hình lại với nhau (thực ra là vẽ lại 2 cái hình trên 1 bitmap mới).
Bạn í để Try... Catch... End try để đề phòng lỗi, nếu có xảy ra thì app cũng không bị crash.

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » T.Bảy 23/03/2013 8:32 am

À mà hơn nữa: Cái sub Save của bạn <chienhmu> mình có ý kiến này: Bạn để là *.jpg, mà thực ra là nó có lưu = jpg đâu?
Cái mà bạn í làm là đổi tên cái đuôi, vì vậy để lưu thành dạng jpeg mềnh có code sau, ở sub Button1_Click:
Nhớ thêm namespace System.Drawing.Imaging vào nhé.
  1. PictureBox3.Image.Save(s.FileName, ImageFormat.Jpeg)
  2.  

Bạn <tranbadat> có thể cho mềnh biết là ghép theo kiểu giề không (trên/dưới, trái/phải, đục,...) mềnh đã có côde chi tiết.

tranbadat
Thành viên chính thức
Thành viên chính thức
Bài viết: 44
Ngày tham gia: T.Năm 21/02/2013 9:50 pm
Has thanked: 22 time
Been thanked: 4 time

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi tranbadat » T.Bảy 23/03/2013 12:02 pm

:) cảm cơn bạn <PAPYRON> nhé ^^
bây h mình muốn có 1 tấm ảnh png ( hình chòm râu)
và ảnh của 1 cha nghệ sĩ nào đó...( VD: Đàm đê )
mình muốn ghép cái ảnh chòm râu lên miệng Đàm thì code kiểu gì...?
Lưu ý là mình nhấp chuột vào cái picturebox có hình cái râu thì cái box ấy nó sẽ di chuyển( kiểu dạng như di chuyển form ấy )
thêm nữa, mình có một vài thắc mắc tại sao lại phải import ?
cái đoạn code

Mã: Chọn hết

bmp = New Bitmap(w, h)
        g = Graphics.FromImage(bmp)
        g.SmoothingMode = SmoothingMode.AntiAlias

có nghĩa là gì ?
cả đây nữa : có nghĩa là ?

Mã: Chọn hết

newbitmap(PictureBox3.Width, PictureBox3.Height)
        g.DrawImage(img1, New Rectangle(0, 0, PictureBox3.Width, PictureBox3.Height / 2))
        g.DrawImage(img2, New Rectangle(0, PictureBox3.Height / 2, PictureBox3.Width, PictureBox3.Height / 2))

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » CN 24/03/2013 12:02 pm

1. Không import á? :D Tuỳ bạn thôi. Nếu không import thì viết cho chết lun à :D hahaha
bạn mà không import thì code của mềnh sẽ như thế này mới hoạt động đc:
  1. PictureBox3.Image.Save(s.FileName, System.Drawing.Imaging.ImageFormat.Jpeg)
  2.  

Vừa dài vừa rồi mắt o.O
2.
  1.         bmp = New Bitmap(w, h)
  2. 'Tạo 1 bítmáp mới (giấy vẽ) chiều cao h chiều rộng w (pixels)
  3.         g = Graphics.FromImage(bmp)
  4. 'Bảo với cái object graphic vẽ lên giấy bmp vừa mới tạo.
  5.         g.SmoothingMode = SmoothingMode.AntiAlias
  6. 'Bảo tiếp với Graphic: m vẽ thì nhớ khử răng cưa luôn cho t nhế.
  7.  

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » CN 24/03/2013 12:41 pm

  1.         newbitmap(PictureBox3.Width, PictureBox3.Height)
  2. ' Tạo bmp mới, nói gòy
  3.         g.DrawImage(img1, New Rectangle(0, 0, PictureBox3.Width, PictureBox3.Height / 2))
  4. ' Bảo object graphic vẽ hình img1 với kích thuớc bằng chiều rộng của picturebox3 (picturebox3.width) và nửa chiều cao của picturebox3 (picturebox3.height / 2)
  5.         g.DrawImage(img2, New Rectangle(0, PictureBox3.Height / 2, PictureBox3.Width, PictureBox3.Height / 2))
  6. ' Bảo object graphic vẽ hình img2 tại (0, Picturebox3.height) tức là ở dưới đáy hìh vừa vẽ ở statement trên, với chiều cao và chiều dài như trên.
  7.  

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » CN 24/03/2013 1:53 pm

Mềnh có đính kèm lên cái project. KHó hiểu chỗ nào, bạn cứ hỏi chỗ đó.
Tập tin đính kèm
test.rar
(14.07 KiB) Đã tải 164 lần

tranbadat
Thành viên chính thức
Thành viên chính thức
Bài viết: 44
Ngày tham gia: T.Năm 21/02/2013 9:50 pm
Has thanked: 22 time
Been thanked: 4 time

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi tranbadat » T.Hai 25/03/2013 10:15 pm

cảm ơn bạn PAPYRON đã giúp đỡ !
mình lại có một câu hỏi nữa muốn hỏi bạn...
mình có 1 lable nằm trên cái picturebox...
bây h mình muốn khi lưu ảnh thì trong ảnh nó lưu luôn cái lable ấy đc không
(VD: cái lable có chữ " WTF" , khi mình lưu ảnh lại thì trong ảnh nó cũng có mấy cái chữ mình đánh vào từ lable :" WTF")

DoremonA
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 441
Ngày tham gia: T.Sáu 29/07/2011 1:00 pm
Has thanked: 11 time
Been thanked: 145 time

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi DoremonA » T.Ba 26/03/2013 10:29 am

Bạn tham khảo Code sau (tại vị trí dán text , thay vào thông tin Label của bạn )
  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         Dim BMP As Bitmap = New Bitmap("C:\Users\pc19\Desktop\Front-View-of-Party-Dress-Women-Pat-Dress.jpg")
  3.         Dim F As Font = New Font(Me.Font.FontFamily, 20, System.Drawing.FontStyle.Regular)
  4.         Dim G As Graphics = Graphics.FromImage(BMP)
  5.         G.DrawString("River near Bellingsdale", F, Brushes.Black, 25, 25) 'Dán Text1 vào hình tọa độ (25,25)
  6.         G.DrawString("25 October 2010", F, Brushes.Red, 25, 100) 'Dán Text2 vào hình tọa độ (25,100)
  7.         PictureBox1.Image = BMP
  8.         BMP.Save("C:\Users\pc19\Desktop\Front.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
  9.     End Sub
  10.  

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » T.Ba 26/03/2013 12:09 pm

Mềnh cũng có sub thế này:
  1. Private Sub DrawLabelToBitmap(ByVal L As Label, ByVal B As Bitmap, ByVal Pos As Point)
  2.         Dim x As New Bitmap(L.Width, L.Height)
  3.         Dim bds As Rectangle = New Rectangle(0, 0, L.Width, L.Height)
  4.         L.DrawToBitmap(x, bds)
  5.         Dim g As Graphics = Graphics.FromImage(B)
  6.         g.DrawImage(x, Pos)
  7.         g.dispose()
  8.     End Sub
  9.  

Với các tham số:
- L là label dùng để thêm vào,
- B là bitmáp gốc để thêm zô
- Pos, bạn chỉ chỗ nào để nó vẽ cái label :D

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » T.Ba 26/03/2013 12:14 pm

Còn không muốn mess với cái label (vì bạn chưa/quên đặt thuộc tính BackgroundColor của label là Transparent để hình vẽ ra xấu) thì cứ dùng cách của bạn DoremonA, tóm lại nó như thế này, với g là obj graphics:
  1. Dim f As New Font("Segoe UI", 12) 'Tên font
  2. g.DrawString("WTF", f, Brushes.White, 100, 100) 'Theo yêu cầu của bạn là thêm chữ WTF zô <!-- s:D --><img src="{SMILIES_PATH}/004.gif" alt=":D" title="Cười nhăn răng" /><!-- s:D -->
  3.  

tranbadat
Thành viên chính thức
Thành viên chính thức
Bài viết: 44
Ngày tham gia: T.Năm 21/02/2013 9:50 pm
Has thanked: 22 time
Been thanked: 4 time

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi tranbadat » T.Tư 27/03/2013 6:07 pm

mình chưa hiểu lắm...( dân tự học Vb mà, hổng có trường lớp đào tạo gì hết á)
bạn <PAPYRON> và < DoremonA> có thể chú thích thêm cho mình tác dụng của từng dòng code của hai bạn không ?
để mình hiểu thêm ấy mà, thanks nhiều =.=

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » T.Tư 27/03/2013 7:01 pm

ae ăn mừng :D mềnh cũng tự học vb từ hồi lớp 7!!! Bị bố mẹ la quá chừng :D

  1. Private Sub DrawLabelToBitmap(ByVal L As Label, ByVal B As Bitmap, ByVal Pos As Point)
  2.         Dim x As New Bitmap(L.Width, L.Height)
  3. 'tạo ra miếng giấy mới để vẽ, kích thước = cái label (L.width, L.height)
  4.         Dim bds As Rectangle = New Rectangle(0, 0, L.Width, L.Height)
  5. 'cái này để lưu kích cỡ label. Mềnh không dùng structure size vì method DrawToBitmap của ctrl ko hỗ trợ tham số size
  6.         L.DrawToBitmap(x, bds)
  7. Dùng method DrawToBitmap để vẽ cái mặt label L zô bitmap vừa tạo. Label bạn thấy thế nào thì nó vẽ lại y chang thế đó (WYSIWYG)
  8.         Dim g As Graphics = Graphics.FromImage(B)
  9. 'tạo 1 obj graphics mới, dùng để vẽ trên tờ giấy nhận được từ tham số
  10.         g.DrawImage(x, Pos)
  11. 'bảo với obj Graphics í m vẽ cái hình này (x - cái hình chân dung cái label) vào hình gốc (b) tại vị trí Pos
  12.         g.dispose()
  13. 'cuối cùg mềnh sẽ đíspôse cái obj graphics đê vì, đơn giàn là mềnh ko muốn chrôme ram của bạn.
  14.     End Sub
  15.  

chình vì cái methôd Control.DrawToBitmap hơi máy móc tí cho nên khi bạn bắt nó vẽ lại chân dung cái label mà quên chỉnh back color thì hình sẽ rất xấu vì: giữa cái hình khung cánh xanh thiệt xanh ở đâu bay ra nguyên khoảng xám mất mỹ qan.
Bời dzậy nên trước khi gọi Control.DrawToBitmap thì nên chỉnh label.backgroundcolor thành Transparent :D
Sửa lần cuối bởi PAPYRON vào ngày T.Tư 27/03/2013 7:09 pm với 1 lần sửa.

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » T.Tư 27/03/2013 7:03 pm


(g là obj graphics, vẽ trên hình gốc)
  1. Dim f As New Font("Segoe UI", 12)
  2. 'Kêu chú system gán cái font "Segoe UI" với kích cỡ 12 (giống trong word í màh) vào object F
  3. g.DrawString("WTF", f, Brushes.White, 100, 100)
  4. 'nói obj graphics g thảo môt hàng chữ thiệt đzẹp zô hình vớ font hồi nãy (segoe ui, 12), hàng chữ "WTF" (bôi bác thật)
  5.  


còn giề nữa?

tranbadat
Thành viên chính thức
Thành viên chính thức
Bài viết: 44
Ngày tham gia: T.Năm 21/02/2013 9:50 pm
Has thanked: 22 time
Been thanked: 4 time

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi tranbadat » T.Tư 27/03/2013 10:06 pm

:) hì hì.....
bạn tự học mà kiến thức được như vậy á ? :)
mình phục thật, trước đây mình học pascal( từ năm lớp 8), nhưng thấy nó không khả dụng cho lắm => học VB6.0 => Vb.net( hiện tại đang học lớp 9)
mình hiện đang thiếu , và hổng kiến thức trầm trọng....( đến vs lập trình vì ham mê mấy cái keygen vs crack mà ) ^^
thế nên nếu đc thì mình xin nick FB của bạn đc hok?( nếu có )
- để tiện hỏi han lúc bí ấy mà - ^^
2.) Thanks bạn vì đã giúp đỡ mấy thắc mắc =.=
3.) cho hỏi thêm ... : Bạn học kiểu gì mà tài quá vậy..... mình học 1 năm mà thấy kiến thức còn quá kém =.=

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » T.Năm 28/03/2013 12:58 pm

fb của mềnh là Nhox Pa Gai / welschiez gutmann / sống tại berlin đức.
thì 1 tk caulacbovb, môt cái trên msdn http://social.msdn.microsoft.com/profile/z%C3%A9n%C3%B4c%C3%B4-%C4%91ing%20r%C3%A8publ%C3%ADc%20m%C3%A9m%20b%C3%A8r%20at%20long%20kh%C3%A1nh/
với 1 cái trên vbforums (cũg papyron).
lúc đầu mềnh học pascal (ko nhớ rõ, tầm lớp 4 ~ 5)
sau vba excel và vb6 (hè lớp 6)
sau thấy vb6 cùi quá nên sang vb.nét.
mềnh học oop từ pascal, rồi qua vb.net lun.
tại vì thíck nên cũg nhanh hiểu :D nhiều sách.

tranbadat
Thành viên chính thức
Thành viên chính thức
Bài viết: 44
Ngày tham gia: T.Năm 21/02/2013 9:50 pm
Has thanked: 22 time
Been thanked: 4 time

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi tranbadat » T.Năm 28/03/2013 7:30 pm

:) à ukm....
mà nghe qua cái vba excel thấy hơi lạ lạ....
nó là cái gì thế bạn
p/s: kết bạn trên f/b rồi đó ^^

Hình đại diện của người dùng
PAPYRON
Thành viên tích cực
Thành viên tích cực
Bài viết: 161
Ngày tham gia: T.Tư 23/11/2011 8:58 am
Đến từ: Lớp 9/4 THCS Lê Quý Đôn, Long Khánh, Đồng Nai.
Has thanked: 2 time
Been thanked: 38 time
Liên hệ:

Re: Tạo file ảnh thông qua save dialog !

Gửi bàigửi bởi PAPYRON » T.Năm 28/03/2013 9:39 pm

thdt í àh?
forum mềnh có box cho vba í là lt 3 cái macro cho excel


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.11 khách