Lỗi vỡ ảnh khi chèn ảnh vào Image trong Form Excel (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

♫ђöล♥ßล†♥†µ♫

Thành viên tiêu biểu
Tham gia
10/3/18
Bài viết
684
Được thích
1,443
Giới tính
Nữ
Nghề nghiệp
Worksheet Function trong VBA , Thư viện mã lập trình, Scripting.Dictionary, Sổ tay VBA, Các hàm dò tìm và tham chiếu
Em xin Chào các Thầy(Cô); Anh(Chị) và các ạn trong diễn đàn. Chúc Thầy(Cô); Anh(Chị) và các Bạn có một ngày đầu tuần vui vẻ và hạnh phúc.
Hôm nay em có vấn đề này kính mong mọi người giúp đỡ:
Em muốn đưa ảnh vào trong khung Image của Form Excel . Mục đích là để chọn được hình vẽ sơ họa rồi chèn hình vẽ đó cho các nội dung công việc trong Biên bản kiểm tra
Hiện tại thì các công việc trên đã hoàn thành nhưng có 1 lỗi là khi ảnh được đưa vào khung Image của Form thì nó bị biến dạng không như hình vẽ ban đầu như thế này ạ (Nhiều Anh nó bị biến dạng không thể nhìn ra được hình vẽ ban đầu nữa :rolleyes:)
Hình 1 là hình ảnh
1543203411437.png
Hình 2 là hình đưa vào khung Image
1543203472118.png
Em xin đính kèm tệp tin . Vậy em kính mong Thầy(Cô); Anh(Chị) và các Bạn khắc phục lỗi trêm dùm em với ạ.
Em xin Chân thành cám ơn -\\/.

 

File đính kèm

Em xin Chào các Thầy(Cô); Anh(Chị) và các ạn trong diễn đàn. Chúc Thầy(Cô); Anh(Chị) và các Bạn có một ngày đầu tuần vui vẻ và hạnh phúc.
Hôm nay em có vấn đề này kính mong mọi người giúp đỡ:
Em muốn đưa ảnh vào trong khung Image của Form Excel . Mục đích là để chọn được hình vẽ sơ họa rồi chèn hình vẽ đó cho các nội dung công việc trong Biên bản kiểm tra
Hiện tại thì các công việc trên đã hoàn thành nhưng có 1 lỗi là khi ảnh được đưa vào khung Image của Form thì nó bị biến dạng không như hình vẽ ban đầu như thế này ạ (Nhiều Anh nó bị biến dạng không thể nhìn ra được hình vẽ ban đầu nữa :rolleyes:)
Hình 1 là hình ảnh
View attachment 208281
Hình 2 là hình đưa vào khung Image
View attachment 208282
Em xin đính kèm tệp tin . Vậy em kính mong Thầy(Cô); Anh(Chị) và các Bạn khắc phục lỗi trêm dùm em với ạ.
Em xin Chân thành cám ơn -\\/.

Tôi thử lấy ảnh gốc và zoom nhỏ lại cũng cỡ với ảnh dưới thì cũng xảy ra hiện tượng như thế thôi. Không phải lỗi gì cả mà là do kích cỡ điểm ảnh của màn hình. Điểm ảnh càng to thì khả năng hiển thị chi tiết càng kém. Với màn hình có điểm ảnh to (độ phân giải thấp), khi hiển thị một bức hình có số điểm nhiều hơn số điểm ảnh trong phạm vi giới hạn của màn hình thì sẽ xảy ra hiện tượng mất chi tiết ảnh.

Nếu bạn dùng màn hình cỡ 2k trở lên và chỉnh khung ảnh to như trên thì gần như ảnh sẽ hiển thị gần với ảnh gốc hơn (nhưng chữ sẽ bị thu nhỏ lại).
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi thử lấy ảnh gốc và zoom nhỏ lại cũng cỡ với ảnh dưới thì cũng xảy ra hiện tượng như thế thôi. Không phải lỗi gì cả mà là do kích cỡ điểm ảnh của màn hình. Điểm ảnh càng to thì khả năng hiển thị chi tiết càng kém. Nếu bạn dùng màn hình cỡ 2k trở lên và chỉnh khung ảnh to như trên thì gần như ảnh sẽ hiển thị gần với ảnh gốc hơn.
Da. Trước hết em xin chân thành cám ơn Anh ạ. Anh ơi có cách nào khắc phục cho nó dễ nhìn một chút không Anh
Em có tham khảo một số phần mềm QLCL. Nhưng họ bán đắt quá tới 3 triệu lận. Mà không biết họ đưa ảnh vào bằng cách nào mà nhìn đẹp lắm ạ
1543206138451.png
 
Lần chỉnh sửa cuối:
Upvote 0
Da. Trước hết em xin chân thành cám ơn Anh ạ. Anh ơi có cách nào khắc phục cho nó dễ nhìn một chút không Anh
Khi phải dùng số điểm ảnh ít hơn để thể hiện một tấm hình có số điểm ảnh nhiều hơn thì chắc chắn sẽ xảy ra hiện tượng mất chi tiết. Nếu màn hình dùng càng nhiều pixcel để hiện thị hình ảnh thì độ trung thực của hình ảnh càng cao.

Lúc trước tôi có dùng Photoshop resize một clipart cỡ trung (chẳng hạn 100x100px) về cỡ (36x36px) để tạo icon thì kết quả thật thảm hại. Hình thu nhỏ lèm nhèm không ra hình thù. Một hãng đồ họa đỉnh cao còn bó tay với thuật toán dùng số điểm ảnh ít hơn để tái tạo một bức hình có số điểm ảnh nhiều hơn là bạn hiểu độ khó về mặt kỹ thuật.

Thêm nữa là chất lượng hình ảnh của bạn không tốt, để tỷ lệ 1:1 mà hình đã thể hiện rõ răng cưa thì đưa phần mềm QLCL cũng không khá hơn trừ khi họ làm được thuật toán tái tạo (kèm tự sửa) ảnh tốt hơn Photoshop.:yahoo:
 
Upvote 0
Da. Trước hết em xin chân thành cám ơn Anh ạ. Anh ơi có cách nào khắc phục cho nó dễ nhìn một chút không Anh
Em có tham khảo một số phần mềm QLCL. Nhưng họ bán đắt quá tới 3 triệu lận.
Thôi thì dùng cách co dãn Form. :D

W module Form sửa thành
Mã:
Private w As Double, h As Double
...
Private Sub UserForm_Initialize()
    Pth = DefinenameValue("LinkfileMH")
    If CheckDir(Pth) = True Then
        Image1.PictureSizeMode = fmPictureSizeModeStretch
        If NameExists("LinkfileMH") = True Then
            PthMyfolder = Pth
            ListBox1.List = GetFileList(PthMyfolder)
        End If
    Else
        MsgBox "Kiem tra lai duong dan file anh minh hoa"
    End If
    Image1,Autosize = TRUE
    w = Image1.width
    h = Image1.height
End Sub

Private Sub ListBox1_Click()
    With ListBox1
        If .ListCount Then
            NameImage = .List(.ListIndex)
            Image1.Picture = LoadPictureGDI(Pth & "\" & .List(.ListIndex))
            If Image1.width > w Then
                Frame4.width = Image1.width + 108
                Me.width = Image1.width + 130
            Else
                Image1.width = w
                Frame4.width = w + 108
                Me.width = w + 130
            End If
            If Image1.height > h Then
                Frame4.height = Image1.height + 60
                Me.height = Image1.height + 94
            Else
                Image1.height = h
                Frame4.height = h + 60
                Me.height = h + 94
            End If
        End If
    End With
End Sub
 
Upvote 0
Da. Trước hết em xin chân thành cám ơn Anh ạ. Anh ơi có cách nào khắc phục cho nó dễ nhìn một chút không Anh
Em có tham khảo một số phần mềm QLCL. Nhưng họ bán đắt quá tới 3 triệu lận. Mà không biết họ đưa ảnh vào bằng cách nào mà nhìn đẹp lắm ạ
3 Triệu thì có gì mà đắt, 1 bữa nhậu là mua được
Giờ bạn nghĩ các IT kết hợp các kỹ sư mới ra phần mềm bán có 3 triệu kêu max

Bạn biết code, thì thấy viết code 1 phần mềm 3 triệu vnđ có đáng không?

Hẳn nào Công nghiệp Phần mềm Việt nam không phát triển ngày càng thụt lùi
Mọi thứ dùng chùa quen rồi

Khi phải dùng số điểm ảnh ít hơn để thể hiện một tấm hình có số điểm ảnh nhiều hơn thì chắc chắn sẽ xảy ra hiện tượng mất chi tiết. Nếu màn hình dùng càng nhiều pixcel để hiện thị hình ảnh thì độ trung thực của hình ảnh càng cao.

Lúc trước tôi có dùng Photoshop resize một clipart cỡ trung (chẳng hạn 100x100px) về cỡ (36x36px) để tạo icon thì kết quả thật thảm hại. Hình thu nhỏ lèm nhèm không ra hình thù. Một hãng đồ họa đỉnh cao còn bó tay với thuật toán dùng số điểm ảnh ít hơn để tái tạo một bức hình có số điểm ảnh nhiều hơn là bạn hiểu độ khó về mặt kỹ thuật.

Thêm nữa là chất lượng hình ảnh của bạn không tốt, để tỷ lệ 1:1 mà hình đã thể hiện rõ răng cưa thì đưa phần mềm QLCL cũng không khá hơn trừ khi họ làm được thuật toán tái tạo (kèm tự sửa) ảnh tốt hơn Photoshop.:yahoo:
Muốn thu nhỏ ảnh, với hình của bài này thì phải thu nhỏ từ phần mềm gốc tạo ra nó (chắc là AutoCAD) - Phần mềm quản lý hình vẽ này theo dạng vector - thu nhỏ bao nhiêu cũng nét (chỉ bé quá thì hình giáp nhau cận nhau quá khỏi nhìn)
 
Upvote 0
3 Triệu thì có gì mà đắt, 1 bữa nhậu là mua được
Giờ bạn nghĩ các IT kết hợp các kỹ sư mới ra phần mềm bán có 3 triệu kêu max
Bạn biết code, thì thấy viết code 1 phần mềm 3 triệu vnđ có đáng không?

Làm giùm không lấy tiền, chỉ 1 chầu sương sương vầy được không?

A_H.JPG
 
Upvote 0
Như tôi đã nói vấn đề này phát sinh chủ yếu từ giới hạn của phần cứng (màn hình) thôi.

Nếu số điểm ảnh trong một đơn vị diện tích màn hình (thường là Dot Per Inch) càng cao thì cùng một kích thước khung hiển thị, thì chắc chắn là hình ảnh, chữ.... trên màn hình có độ phân giải cao sẽ hiển thị chi tiết tốt màn hình có độ phân giải thấp hơn dù cùng 1 file (trừ khi file có số điểm ảnh nhỏ).

Ví dụ bỏ qua tranh cãi màn hình mắc rẻ, nếu phần mềm của bạn này được thiết kế dùng trên 1 cái màn hình 4k (3840 × 1080), thì cùng một khung hiển thị hình cỡ 8cmx8cm chắc chắn là mịn và sắc nét hơn hiển thị trên 1 cái màn cỡ HD (phổ biến 1368x768).

Còn cho dù là vector mà hiển thị cỡ 8cmx8cm trên một cái màn hình độ phân giải VGA hoặc thấp hơn thì đường thẳng cũng hóa thành răng cưa nhé.:whistling:

Điều này xảy ra không chỉ xảy ra với màn hình máy tính mà với cả máy in.

Anh/chị nào chưa hiểu tại sao tin nhắn dù chung 1 font trên con Nokia đời đầu không sắc nét như mấy con Nokia đời sau thì giờ có thể tự hiểu rồi đó.
 
Lần chỉnh sửa cuối:
Upvote 0
Như tôi đã nói vấn đề này phát sinh chủ yếu từ giới hạn của phần cứng (màn hình) thôi.
Cái này thì dễ hiểu thôi. Vấn đề đặt ra là không phải tìm hiểu nguyên nhân nữa mà là cách khắc phục. Người ta đã có ảnh rồi, không có ảnh khác. Máy in xịn hay không cũng có rồi. Mắt tinh hay không cũng có rồi. Bây giờ ngồi khóc, hay cắn răng chi 3 triệu, hay có cách khắc phục. Thế thôi. :D
 
Upvote 0
Hiện tại thì các công việc trên đã hoàn thành
. Híc. Hoàn thành rồi thì mình cứ triển tiếp thôi. :)

có 1 lỗi là khi ảnh được đưa vào khung Image của Form thì nó bị biến dạng không như hình vẽ ban đầu như thế này
. Vấn đề này mình đoán quá trình resize ảnh đã làm giảm chất lượng ảnh. Nếu resize đúng cách thì không vấn đề gì. Bởi lẽ, thông thường một cái ảnh to đùng, làm nhỏ lại thì nó càng mịn hơn mà. :). Ai không tin mở Illustrator lên thử nhé.
Còn chuyện kích thước điểm ảnh pixel (not pixcel) khác hoàn toàn độ phân giải. Kích thước điểm ảnh là kích thước dài rộng của bản thân một điểm ảnh (pixel, ultra pixel... ), mấy tấm led thì mỗi điểm ảnh to như đầu đũa :).
 
Upvote 0
Không hẳn vậy. Thử load CDMD.png vào Windows Paint -> co chiều ngang còn 1 nửa, để lại nguyên chiều cao. Ảnh sau khi thu nhỏ không "nét" bằng ảnh gốc.

Tất nhiên Paint không thể bằng Illustrator. Illustrator là công sức người ta viết ra, tôi không dùng nhưng chắc là có phí.

Ngoài ra anh Image thì không có những "chiêu" khủng. Chỉ là hoặc nguyên cỡ hoặc phóng to thu nhỏ (phóng to thu nhỏ 2 chiều không đều vì cùng một khung nhưng các ảnh có tỷ lệ 2 chiều khác nhau)
 
Upvote 0
Cái này thì dễ hiểu thôi. Vấn đề đặt ra là không phải tìm hiểu nguyên nhân nữa mà là cách khắc phục. Người ta đã có ảnh rồi, không có ảnh khác. Máy in xịn hay không cũng có rồi. Mắt tinh hay không cũng có rồi. Bây giờ ngồi khóc, hay cắn răng chi 3 triệu, hay có cách khắc phục. Thế thôi. :D
Đã lý giải như thế thì cách đơn giản nhất là tậu 1 cái màn hình 2k hay 4k. Ba triệu là có khả năng sở hữu cái màn hình 2k mới rồi. Lúc đó thì sẽ phải chỉnh lại kích cỡ control, chữ, layout...

Còn anh nào thành công theo hướng "dùng số điểm ảnh ít hơn để tái tạo được hình bitmap có số điểm ảnh nhiều hơn một cách trung thực như ảnh gốc (trừ ảnh các khối hình học hoặc ảnh gốc có độ phân giải cao)" thì tôi bảo đảm hãng Adobe hoặc Canon, Nikon, Fujfilm... sẵn lòng đặt 1 chỗ làm việc với mức lương triệu đô cho bác đó ngay và luôn.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu ảnh do mình tạo thì nên thử tạo ở dạng Enhanced Windows Metafile (EMF) hoặc Windows Metafile (WMF)
 
Upvote 0
Em rất cám ơn các Thầy, Anh Chị đã quan tâm đến Topic của em ạ. Hôm nay em rất vui là có các Anh và Thầy giúp đỡ em ạ
Bài đã được tự động gộp:

Cũng định gợi ý một cái "phần mềm" 3.5 tr (để có hoa hồng) mà nghe tác giả nói "mắc" nên "nín" luôn
3 Triệu thì có gì mà đắt, 1 bữa nhậu là mua được
Giờ bạn nghĩ các IT kết hợp các kỹ sư mới ra phần mềm bán có 3 triệu kêu max

Bạn biết code, thì thấy viết code 1 phần mềm 3 triệu vnđ có đáng không?

Hẳn nào Công nghiệp Phần mềm Việt nam không phát triển ngày càng thụt lùi
Mọi thứ dùng chùa quen rồi


Muốn thu nhỏ ảnh, với hình của bài này thì phải thu nhỏ từ phần mềm gốc tạo ra nó (chắc là AutoCAD) - Phần mềm quản lý hình vẽ này theo dạng vector - thu nhỏ bao nhiêu cũng nét (chỉ bé quá thì hình giáp nhau cận nhau quá khỏi nhìn)
Dạ 3tr là 50% lương tháng hiện tại của em ạ. Nhưng co nghiệt gã là họ toàn sử dụng hàm hoặc Sub của GPE Anh ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Đã lý giải như thế thì cách đơn giản nhất là tậu 1 cái màn hình 2k hay 4k. Ba triệu là có khả năng sở hữu cái màn hình 2k mới rồi. Lúc đó thì sẽ phải chỉnh lại kích cỡ control, chữ, layout...

Còn anh nào thành công theo hướng "dùng số điểm ảnh ít hơn để tái tạo được hình bitmap có số điểm ảnh nhiều hơn một cách trung thực như ảnh gốc (trừ ảnh các khối hình học hoặc ảnh gốc có độ phân giải cao)" thì tôi bảo đảm hãng Adobe hoặc Canon, Nikon, Fujfilm... sẵn lòng đặt 1 chỗ làm việc với mức lương triệu đô cho bác đó ngay và luôn.
Trong trường hợp này thì người ta 99% là có trường hợp ngược lại: "dùng số điểm ảnh nhiểu hơn để tái tạo được hình bitmap có số điểm ảnh ít hơn". Cái này hoàn toàn làm được.
Ngoài ra không phải người ta mở ảnh gốc trên màn hình xịn để xem mà là mở ảnh thu nhỏ 2 chiều không đều trong Image.
Bài đã được tự động gộp:

Em rất cám ơn các Thầy, Anh Chị đã quan tâm đến Topic của em ạ. Hôm nay em rất vui là có các Anh và Thầy giúp đỡ em ạ
Bài đã được tự động gộp:
Có nghĩa là sao? Bạn chọn phương án nào? Tự mua 3 triệu, sẽ nhờ mua 3,5 triệu, co dãn Form, hay mua màn hình xịn? Hay cảm ơn những lời tán gẫu?
 
Upvote 0
Trong trường hợp này thì người ta 99% là có trường hợp ngược lại: "dùng số điểm ảnh nhiểu hơn để tái tạo được hình bitmap có số điểm ảnh ít hơn". Cái này hoàn toàn làm được.
Ngoài ra không phải người ta mở ảnh gốc trên màn hình xịn để xem mà là mở ảnh thu nhỏ 2 chiều không đều trong Image.
Bác vui tánh quá! Bác thử so sánh kích thước ảnh gốc ở chế độ zoom 1:1 với ảnh hiển thị trên form thử xem. Giả sử ảnh gốc có kích thước dài rộng lớn gấp đôi ảnh trên form thì có phải ảnh gốc dùng 4 lần số điểm ảnh của màn hình để hiển thị so với hình trên form không ạ?
 
Lần chỉnh sửa cuối:
Upvote 0
Trong trường hợp này thì người ta 99% là có trường hợp ngược lại: "dùng số điểm ảnh nhiểu hơn để tái tạo được hình bitmap có số điểm ảnh ít hơn". Cái này hoàn toàn làm được.
Ngoài ra không phải người ta mở ảnh gốc trên màn hình xịn để xem mà là mở ảnh thu nhỏ 2 chiều không đều trong Image.
Bài đã được tự động gộp:


Có nghĩa là sao? Bạn chọn phương án nào? Tự mua 3 triệu, sẽ nhờ mua 3,5 triệu, co dãn Form, hay mua màn hình xịn? Hay cảm ơn những lời tán gẫu?

Bài đã được tự động gộp:

Dạ. Rất mong được Thầy chỉ bảo dùm em ạ
 
Upvote 0
Bác vui tánh quá! Bác thử so sánh kích thước ảnh gốc ở chế độ zoom 1:1 với ảnh hiển thị trên form thử xem. Giả sử ảnh gốc có kích thước dài rộng lớn gấp đôi ảnh trên form thì có phải ảnh gốc dùng 4 lần số điểm ảnh của màn hình để hiển thị so với hình trên form không ạ?
Thì đúng rồi. Ảnh gốc có nhiều hơn pixel mà ta có ảnh gốc mà. Cái ta phải tạo là ảnh nhỏ. Tức có ảnh nhiều pixel và cần tạo ảnh có ít pixel là gì. Nên nhớ là cái ta có là ảnh gốc (nhiều điểm) và cần tạo ảnh mới (có ít điểm hơn)

Tất nhiên 2 ảnh đều hiển thị trên cùng 1 màn hình. Nhưng ở đây ta có trường hợp có nhiều điểm cần tạo ít điểm chứ không như bạn thách đố là có ít điểm và cần tạo nhiều điểm. Bạn đọc lại bài của mình thì thấy đúng là ngược.
Bài đã được tự động gộp:

Dạ. Rất mong được Thầy chỉ bảo dùm em ạ
Câu trên bạn hỏi tôi?
Chú ý trích sao cho chính xác.

Chỉ bảo gì? Tôi thấy bạn viết
Hôm nay em rất vui là có các Anh và Thầy giúp đỡ em ạ
nên tôi hỏi cái gì cụ thể đã giúp được bạn. Thế thôi.
Nếu bạn nói là các lời tán gẫu cũng giúp được bạn thì tôi cũng hiểu thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng ở đây ta có trường hợp có nhiều điểm cần tạo ít điểm chứ không như bạn thách đố là có ít điểm và cần tạo nhiều điểm. Bạn đọc lại bài của mình thì thấy đúng là ngược.
Chú xem lại nguyên văn cháu nói cái. Hình như cháu dùng chữ nghĩa lủng củng quá sao ạ?
Còn anh nào thành công theo hướng "dùng số điểm ảnh ít hơn để tái tạo được hình bitmap có số điểm ảnh nhiều hơn một cách trung thực như ảnh gốc (trừ ảnh các khối hình học hoặc ảnh gốc có độ phân giải cao)" thì tôi bảo đảm hãng Adobe hoặc Canon, Nikon, Fujfilm... sẵn lòng đặt 1 chỗ làm việc với mức lương triệu đô cho bác đó ngay và luôn.
Rõ ràng là cháu nói "dùng số điểm ảnh ít hơn để tái tạo" mà?
 
Lần chỉnh sửa cuối:
Upvote 0
Bài tôi viết có trích đàng hoàng. Tôi trích lại
Còn anh nào thành công theo hướng "dùng số điểm ảnh ít hơn để tái tạo được hình bitmap có số điểm ảnh nhiều hơn một cách trung thực như ảnh gốc (trừ ảnh các khối hình học hoặc ảnh gốc có độ phân giải cao)" thì tôi bảo đảm hãng Adobe hoặc Canon, Nikon, Fujfilm... sẵn lòng đặt 1 chỗ làm việc với mức lương triệu đô cho bác đó ngay và luôn.
Như thế thì bài #18 chả ngược với bài thách đố #14 là gì?
 
Upvote 0
Cháu nói trong #14 như thế này chú ạ!
Còn anh nào thành công theo hướng "dùng số điểm ảnh ít hơn để tái tạo được hình bitmap có số điểm ảnh nhiều hơn một cách trung thực như ảnh gốc (trừ ảnh các khối hình học hoặc ảnh gốc có độ phân giải cao)" thì tôi bảo đảm hãng Adobe hoặc Canon, Nikon, Fujfilm... sẵn lòng đặt 1 chỗ làm việc với mức lương triệu đô cho bác đó ngay và luôn.
Cháu nói trong #18 như thế này chú ạ!
Bác thử so sánh kích thước ảnh gốc ở chế độ zoom 1:1 với ảnh hiển thị trên form thử xem. Giả sử ảnh gốc có kích thước dài rộng lớn gấp đôi ảnh trên form thì có phải ảnh gốc dùng 4 lần số điểm ảnh của màn hình để hiển thị so với hình trên form không ạ?
Ý cháu là hình gốc giả sử tỷ lệ 1:1 hiển thị trên màn hình 1000x1000 (1 triệu điểm) nhưng mà khung ảnh của form chỉ hiển thị 500x500 (250k điểm). Hay nói cách khác là form dùng 250k điểm để mô tả lại 1 triệu điểm của hình gốc. Và so sánh kết quả hiển thị cho thấy ảnh trong khung không mô tả lại được đúng như ảnh gốc khi dùng ít điểm ảnh hơn.

Ý cháu vẫn y xì chứ có ngược gì đâu ạ?
 
Lần chỉnh sửa cuối:
Upvote 0
Cháu nói trong #14 như thế này chú ạ!

Cháu nói trong #18 như thế này chú ạ!

Ý cháu là hình gốc giả sử tỷ lệ 1:1 hiển thị trên màn hình 1000x1000 (1 triệu điểm) nhưng mà khung ảnh của form chỉ hiển thị 500x500 (250k điểm). Hay nói cách khác là form dùng 250k điểm để mô tả lại 1 triệu điểm của hình gốc. Và so sánh kết quả hiển thị cho thấy ảnh trong khung không mô tả lại được đúng như ảnh gốc khi dùng ít điểm ảnh hơn.

Ý cháu vẫn y xì chứ có ngược gì đâu ạ?
Thì cũng chính là cách nói: có ảnh nhiều điểm rồi. Bây giờ trên cơ sở ảnh to, từ nhiều điểm, soạn một ảnh khác có ít điểm hơn.

Và tôi cũng đã nói là quá trình này là (tương đối) bình thường.

Chỉ có trường hợp ngược lại như bài #14: có ảnh ít điểm tạo ảnh nhiều điểm thì mới có vấn đề lớn hơn.

Nhưng tôi cũng nói rồi: nguyên nhân cũng dễ hiểu, cho dù bạn giải thích không được chính xác cho lắm, có thể gây hiểu lầm. Cái quan trọng là đưa ra cách khắc phục.

Tôi đưa ra 2 giải pháp: 1. Co dãn Form, 2. tạo ngay từ đầu EMF, WMF. Bạn đề nghị mua màn hình mới.
 
Upvote 0
Em rất cám ơn các Thầy, Anh Chị đã quan tâm đến Topic của em ạ. Hôm nay em rất vui là có các Anh và Thầy giúp đỡ em ạ
Bài đã được tự động gộp:



Dạ 3tr là 50% lương tháng hiện tại của em ạ. Nhưng co nghiệt gã là họ toàn sử dụng hàm hoặc Sub của GPE Anh ạ
Thì đó vấn nạn từ GPE đã tạo ra những người xài chùa, những người không học gửi bài tập lên giải để chống chế thầy cô
 
Upvote 0
Thì đó vấn nạn từ GPE đã tạo ra những người xài chùa,
Ở Việt Nam "sướng thật". Cần Windows, Office thì cứ ra "tiệm net đầu phố". Ở các nơi khác người ta luôn phải đắn đo: liệu có nên bỏ một khoản lớn ra không? Liệu đã cần tới tận phiên bản xyz chưa? Ở VN luôn dùng đồ mới nhất.
 
Upvote 0
Chỉ có trường hợp ngược lại như bài #14: có ảnh ít điểm tạo ảnh nhiều điểm thì mới có vấn đề lớn hơn.
Nếu chú cứ muốn hiểu ý cháu theo cách hiểu của chú thì cháu cũng nói làm gì nữa ạ. Thực tế thì hiện nay người ta đã có công nghệ tái tạo hình ảnh từ hình nhỏ hơn rồi. Ví dụ bên Mỹ hình chụp vệ tinh có độ phân giải không thể nhìn rõ biển số xe thì có thể biến đổi ra độ phân giải lớn hơn đủ để đọc được biển số xe. (Cũng không rành nên cũng không dám nói sâu về khía cạnh này)

Diễn đạt suông vấn đề này thì rất khó hiểu nên xin gửi minh họa để giúp một số bạn có thể hình dung phần nào những gì xảy ra trong quá trình thu nhỏ hình ảnh.

Ở hình này là cắt từ file ảnh gốc
o.png
Và hình dưới thu được sau khi thu nhỏ lại bằng 70% kích thước hình gốc
o2.png
Để tiện so sánh kết quả, tôi phóng to 2 hình này có kích thước tương đương với chất lượng ảnh hiển thị bảo đảm không sai lệch nhiều sau khi phóng to.

Đây là kết quả của thuật toán thu nhỏ ảnh Microsoft dùng trong Paint. Tôi nói rõ là do nhân viên Microsoft làm chứ không lôi bác Bill nào ở đây nhé nếu không nhiều người hiểu nhầm trình độ của bác ấy mất.

Sau phép thu nhỏ bằng 70% kích thước hình gốc, hình thứ 2 thu được bị nhòe (mất nét) so với hình 1. Thuật toán không thể tái tạo được chi tiết ảnh sau khi thu nhỏ mà nguyên do là... Các bạn nếu hứng thú với vấn đề này thì tự tìm hiểu nhé. Tôi trình độ hạn hẹp nên không dám cố theo mấy vấn đề chuyên sâu thế này vì dễ xoay ra cái ngu bẩm sinh lắm :cray:

Các hãng máy ảnh như Nikon, Canon, Fujifilm cũng gặp vấn đề tương tự như với Paint của Microsoft trong trường hợp số điểm ảnh trên cảm biến nhiều hơn số điểm ảnh của file hình xuất ra vì lý do người dùng muốn tiết kiệm bộ nhớ lưu hình. Ví dụ cảm biến máy ảnh 24 Mpx nhưng người dùng chỉ muốn lưu ở độ phân giải 12Mpx. Nếu người dùng chụp 1 trang văn bản (báo, sách...), cảm biến 24Mpx của máy ảnh thu được chi tiết của nội dung đến mức có thể đọc được (nếu phóng lớn) nhưng khi xuất ra 12Mpx thì lại xảy ra hiện tượng mất nét sau khi phóng lớn.
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu chú cứ muốn hiểu ý cháu theo cách hiểu của chú thì cháu cũng nói làm gì nữa ạ. Thực tế thì hiện nay người ta đã có công nghệ tái tạo hình ảnh từ hình nhỏ hơn rồi. Ví dụ bên Mỹ hình chụp vệ tinh có độ phân giải không thể nhìn rõ biển số xe thì có thể biến đổi ra độ phân giải lớn hơn đủ để đọc được biển số xe. (Cũng không rành nên cũng không dám nói sâu về khía cạnh này)

Diễn đạt suông vấn đề này thì rất khó hiểu nên xin gửi minh họa để giúp một số bạn có thể hình dung phần nào những gì xảy ra trong quá trình thu nhỏ hình ảnh.

Ở hình này là cắt từ file ảnh gốc
View attachment 208340
Và hình dưới thu được sau khi thu nhỏ lại bằng 70% kích thước hình gốc
View attachment 208341
Để tiện so sánh kết quả, tôi phóng to 2 hình này có kích thước tương đương với chất lượng ảnh hiển thị bảo đảm không sai lệch nhiều sau khi phóng to.

Đây là kết quả của thuật toán thu nhỏ ảnh Microsoft dùng trong Paint. Tôi nói rõ là do nhân viên Microsoft làm chứ không lôi bác Bill nào ở đây nhé nếu không nhiều người hiểu nhầm trình độ của bác ấy mất.

Sau phép thu nhỏ bằng 70% kích thước hình gốc, hình thứ 2 thu được bị nhòe (mất nét) so với hình 1. Thuật toán không thể tái tạo được chi tiết ảnh sau khi thu nhỏ mà nguyên do là... Các bạn nếu hứng thú với vấn đề này thì tự tìm hiểu nhé. Tôi trình độ hạn hẹp nên không dám cố theo mấy vấn đề chuyên sâu thế này vì dễ xoay ra cái ngu bẩm sinh lắm :cray:

Các hãng máy ảnh như Nikon, Canon, Fujifilm cũng gặp vấn đề tương tự như với Paint của Microsoft trong trường hợp số điểm ảnh trên cảm biến nhiều hơn số điểm ảnh của file hình xuất ra vì lý do người dùng muốn tiết kiệm bộ nhớ lưu hình. Ví dụ cảm biến máy ảnh 24 Mpx nhưng người dùng chỉ muốn lưu ở độ phân giải 12Mpx. Nếu người dùng chụp 1 trang văn bản (báo, sách...), cảm biến 24Mpx của máy ảnh thu được chi tiết của nội dung đến mức có thể đọc được (nếu phóng lớn) nhưng khi xuất ra 12Mpx thì lại xảy ra hiện tượng mất nét sau khi phóng lớn.
Thôi thì tôi viết lần cuối thế này:
1. Tôi chỉ nói ý của bài 14 và 18 ngược nhau. Không có chỗ nào tôi nói là bài 14, 18 sai hay đúng.

2. Không có chỗ nào tôi nói là phóng to hay thu nhỏ sẽ không làm giảm chất lượng ảnh. Thậm chí tôi còn nói là chắc chắn chất lượng sẽ giảm. Tôi còn viết rõ là theo tôi thì khi thu nhỏ (từ ảnh nhiều pixel thành ảnh ít pixel) thì chất lượng giảm ít hơn so với trường hợp phóng to.

3. Bạn nói chất lượng ảnh phụ thuộc vào độ phân giải màn hình? Khi bạn xem 1 ảnh thì rõ ràng nó phụ thuộc màn hình. Nhưng đây là quá trình hiển thị. Quá trình hiển thị là nhiệm vụ của màn hình và tùy màn hình mà sẽ có hiển thị khác nhau. Nó cũng giống như hiển thị văn bản. Hiển thị văn bản là nhiệm vụ của phông chữ. Tùy theo phông chữ được chọn mà văn bản sẽ có hình hài hơi khác (vd. Arial, Times). Nếu chọn phông chữ khác còn có thể ra "đầu trâu mặt ngựa".
Nhưng khi bước vào so sánh 2 ảnh thì phải mở cả 2 trên cùng 1 màn hình để chúng có điều kiện như nhau, có "xuất phát điểm như nhau", "môi trường biểu diễn" như nhau. Lúc này mọi sự khác biệt giữa ảnh to và nhỏ là do một nguyên nhân khác. Bạn cho cô A câu hỏi B, cô C câu hỏi D mà cô A được điểm 10 còn cô C điểm 5 thì rõ ràng có sự chênh lệch nhưng chưa chắc cô A giỏi hơn C. Khi cô A và B đều làm câu B hoặc D, tức có cùng điều kiện như nhau, có "xuất phát điểm như nhau", "môi trường biểu diễn" như nhau mà cô A được 10 cô C được 5 thì lúc này có thể kết luận được.
Khi 2 ảnh được hiển thị trên trên cùng một màn hình có độ phân giải như nhau mà thấy có sự khác biệt thì sự khác biệt đó chính là do quá trình thu nhỏ phóng to gây ra.

4. Một diễn viên tồi thì khi gặp tình huống dễ vẫn diễn kém nhưng diễn viên giỏi thì gặp tình huống khó vẫn vượt qua thành công.
Nếu tôi có màn hình có độ phân giải tốt và tôi mở tập tin CDMD.png (tập tin cụ thể) của tác giả tôi nhìn thấy tương đối rõ. Bây giờ cũng trên máy đó tôi mở chương trình đồ họa và thu nhỏ chiều ngang còn 50%, chiều dài để nguyên. Làm thế để ảnh có tỷ lệ 2 chiều gần giống tỷ lệ của khung ảnh IMAGE1. Tôi tin chắc rằng ảnh thu nhỏ sẽ không còn nhìn thấy rõ nữa. Chất lượng giảm không chỉ do quá trình thu nhỏ gây ra. Ảnh thu nhỏ không nhìn rõ nữa do bản gốc vốn đã có chất lượng không được tốt. Nếu ảnh CDMD.png rõ từng nét, rõ từng chữ khi hiển thị trên màn hình hiện hành thì ảnh thu nhỏ của nó dù chất lượng có kém hơn thì vẫn nhìn rõ hơn nhiều so với trường hợp ảnh gốc không được chuẩn lắm.

Theo tôi một khi ảnh gốc không chuẩn lắm thì dù có mua màn hình mới thì khi ảnh bị thu nhỏ trong khung IMAGE1 thì nó cũng không nhìn rõ được. Nguyên nhân chính ở đây không phải là độ phân giải của màn hình mà là chất lượng của ảnh gốc (cô diễn viên). Vì thế mà chọn chất lượng cao cho ảnh gốc sẽ đem lại kết quả nhiều hơn. Chất lượng, và theo tôi cả kiểu ảnh - vector graphics sẽ đem lại nhiều kết quả hơn.

Bạn chắc đã nói hết ý của mình. Tôi đã nói hết ý của mình. Tôi nghĩ thế là đủ. Tôi không kết luận bạn sai hay đúng. Chỉ duy hất là nói ý của bài 14 và 18 ngược nhau. Không nói nói bài nào đúng hay sai. Tôi nghĩ không cần giải thích gì thêm. Ai cũng nói hết ý mình rồi. Đây chỉ là bầy tỏ quan điểm chứ không phải tranh luận ai đúng ai sai.
 
Upvote 0
Tôi nghĩ chủ topic nên tìm hiểu thêm về ảnh vector và ảnh raster, và quan trọng hơn hiểu rõ là hình minh họa trên form cái nào cần bỏ đi chi tiết (khi thu nhỏ, chi tiết quá nhỏ sao thấy - trong kỹ thuật người ta phải vẽ riêng ra hoặc sai tỷ lệ ) hay là chọn cách hiển thị thích hợp. Không chỉ thu nhỏ hình đơn thuần được.
 
Upvote 0
Thôi thì tôi viết lần cuối thế này:
1. Tôi chỉ nói ý của bài 14 và 18 ngược nhau. Không có chỗ nào tôi nói là bài 14, 18 sai hay đúng.

2. Không có chỗ nào tôi nói là phóng to hay thu nhỏ sẽ không làm giảm chất lượng ảnh. Thậm chí tôi còn nói là chắc chắn chất lượng sẽ giảm. Tôi còn viết rõ là theo tôi thì khi thu nhỏ (từ ảnh nhiều pixel thành ảnh ít pixel) thì chất lượng giảm ít hơn so với trường hợp phóng to.

3. Bạn nói chất lượng ảnh phụ thuộc vào độ phân giải màn hình? Khi bạn xem 1 ảnh thì rõ ràng nó phụ thuộc màn hình. Nhưng đây là quá trình hiển thị. Quá trình hiển thị là nhiệm vụ của màn hình và tùy màn hình mà sẽ có hiển thị khác nhau. Nó cũng giống như hiển thị văn bản. Hiển thị văn bản là nhiệm vụ của phông chữ. Tùy theo phông chữ được chọn mà văn bản sẽ có hình hài hơi khác (vd. Arial, Times). Nếu chọn phông chữ khác còn có thể ra "đầu trâu mặt ngựa".
Nhưng khi bước vào so sánh 2 ảnh thì phải mở cả 2 trên cùng 1 màn hình để chúng có điều kiện như nhau, có "xuất phát điểm như nhau", "môi trường biểu diễn" như nhau. Lúc này mọi sự khác biệt giữa ảnh to và nhỏ là do một nguyên nhân khác. Bạn cho cô A câu hỏi B, cô C câu hỏi D mà cô A được điểm 10 còn cô C điểm 5 thì rõ ràng có sự chênh lệch nhưng chưa chắc cô A giỏi hơn C. Khi cô A và B đều làm câu B hoặc D, tức có cùng điều kiện như nhau, có "xuất phát điểm như nhau", "môi trường biểu diễn" như nhau mà cô A được 10 cô C được 5 thì lúc này có thể kết luận được.
Khi 2 ảnh được hiển thị trên trên cùng một màn hình có độ phân giải như nhau mà thấy có sự khác biệt thì sự khác biệt đó chính là do quá trình thu nhỏ phóng to gây ra.

4. Một diễn viên tồi thì khi gặp tình huống dễ vẫn diễn kém nhưng diễn viên giỏi thì gặp tình huống khó vẫn vượt qua thành công.
Nếu tôi có màn hình có độ phân giải tốt và tôi mở tập tin CDMD.png (tập tin cụ thể) của tác giả tôi nhìn thấy tương đối rõ. Bây giờ cũng trên máy đó tôi mở chương trình đồ họa và thu nhỏ chiều ngang còn 50%, chiều dài để nguyên. Làm thế để ảnh có tỷ lệ 2 chiều gần giống tỷ lệ của khung ảnh IMAGE1. Tôi tin chắc rằng ảnh thu nhỏ sẽ không còn nhìn thấy rõ nữa. Chất lượng giảm không chỉ do quá trình thu nhỏ gây ra. Ảnh thu nhỏ không nhìn rõ nữa do bản gốc vốn đã có chất lượng không được tốt. Nếu ảnh CDMD.png rõ từng nét, rõ từng chữ khi hiển thị trên màn hình hiện hành thì ảnh thu nhỏ của nó dù chất lượng có kém hơn thì vẫn nhìn rõ hơn nhiều so với trường hợp ảnh gốc không được chuẩn lắm.

Theo tôi một khi ảnh gốc không chuẩn lắm thì dù có mua màn hình mới thì khi ảnh bị thu nhỏ trong khung IMAGE1 thì nó cũng không nhìn rõ được. .
Chú có thể biết quá nhiều về lập trình nhưng hình như không được cập nhật cũng như trải nghiệm nhiều về một số vấn đề kỹ thuật hiện tại thì phải.

Ảnh nếu được phóng to theo bội số nguyên (x1, x2, 3....) thì về nguyên lý vẫn có khả năng bảo đảm nguyên vẹn như ảnh gốc (nhưng tùy thuật toán có biết lợi dụng những trường hợp đó hay không).

Chú có thể chưa bao giờ làm về đồ họa nên hình như không biết độ phân giải màn hình ảnh hưởng đến chất lượng hiển thị như thế nào.
Ví dụ lấy bức hình CDMD.jpg (913x332) để giới hạn trong khung 12cmx12cm của màn hình 14 inchgiữ nguyên tỷ lệ dài/rộng.
  • Nếu độ phân giải HD (1368x768) thì chữ hầu như không đọc được.
  • Nhưng nếu dùng màn hình có độ phân giải fullHD 1080p (1920x1080) thì chữ hiện rõ ràng vì số điểm ảnh mà màn hình 1080p sử dụng để hiện thị ảnh lớn hơn nhiều so với màn HD và gần bằng số điểm ảnh của file hình CDMD.
  • Vấn đề này cũng có thể phát sinh trên cùng một tấm hình cùng kích thước với 2 máy in có DPI chênh lệch lớn.
Cháu từng ngạc nhiên khi gặp 1 chú U50 tậu cho mình một cái màn hình CRT để làm đồ họa và càng ngạc nhiên hơn khi chú nói ra lý do là do cái màn LCD nó hiển thị không chuẩn, ảnh bị méo :shok:. Sau khi lý giải nguyên nhân tại sao cái màn LCD đó hiển thị méo (do độ phân giải không phù hợp) và cách khắc phục thì cái màn CRT đã ra đi cùng đồng nát.--=0

Không phải vô cớ mà độ các hãng màn hình đổ hàng tỷ đô để nâng cao độ phân giải nhưng mà nếu người dùng nếu không hiểu được ý nghĩa của việc đó thì có vẻ các hãng màn hình đang làm những điều lãng phí vô ích.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi nghĩ chủ topic nên tìm hiểu thêm về ảnh vector và ảnh raster, và quan trọng hơn hiểu rõ là hình minh họa trên form cái nào cần bỏ đi chi tiết (khi thu nhỏ, chi tiết quá nhỏ sao thấy - trong kỹ thuật người ta phải vẽ riêng ra hoặc sai tỷ lệ ) hay là chọn cách hiển thị thích hợp. Không chỉ thu nhỏ hình đơn thuần được.
Dạ. Hiện tại thì em đang dùng cách của bài 5. Chựu khó sống với khung Image1 nó nhảy tới nhảy lui ạ. Mới lại cái này chỉ là để quan sát chọn hình gán vào dữ liệu thôi. Chứ còn hình gán xuống bảng tính thì nó vẫn đẹp
Bài đã được tự động gộp:

Coi chừngng cái Nick này là Nick anh nói hôm thứ bảy đó.
Cháu bị đưa vào tầm ngắm rồi hả Chú. Tội nghiệp cho Cháu quá (@$%@
 
Lần chỉnh sửa cuối:
Upvote 0
Sorry bạn hoa lá!
Đến giờ mới tập trung đi vào cái file excel của bạn vì mải cuốn vô bàn luận lý thuyết xa xôi :sweatdrop:. Bạn xem thử cái file này có cải thiện được chút gì không nhé. Nguyên lý giải quyết của mình là:
  1. Hình có kích thước lớn hơn khung thì sẽ thu nhỏ lại vừa bằng khu hình.
  2. Hình có kích thước nhỏ hơn khung hình thì giữ nguyên kích thước 1:1 để chất lượng hiển thị được trung thực nhất.
Chú ý thuộc tính PictureAlignment, PictureAlignment để vận dụng về sau nhé.
Hiển nhiên là mình phải điều chỉnh lại kích cỡ form. Ngoài phần image mình có thêm chút tùy chọn ở GetFileList để giảm bớt file vô ích trong list.
Khả năng chỉ có nhiêu đó nên chắc không dám huyên thuyên thêm nữa:giveup:. Ai có ý gì thì inbox.
 

File đính kèm

Upvote 0
Sorry bạn hoa lá!
Đến giờ mới tập trung đi vào cái file excel của bạn vì mải cuốn vô bàn luận lý thuyết xa xôi :sweatdrop:. Bạn xem thử cái file này có cải thiện được chút gì không nhé. Nguyên lý giải quyết của mình là:
  1. Hình có kích thước lớn hơn khung thì sẽ thu nhỏ lại vừa bằng khu hình.
  2. Hình có kích thước nhỏ hơn khung hình thì giữ nguyên kích thước 1:1 để chất lượng hiển thị được trung thực nhất.
Chú ý thuộc tính PictureAlignment, PictureAlignment để vận dụng về sau nhé.
Hiển nhiên là mình phải điều chỉnh lại kích cỡ form. Ngoài phần image mình có thêm chút tùy chọn ở GetFileList để giảm bớt file vô ích trong list.
Khả năng chỉ có nhiêu đó nên chắc không dám huyên thuyên thêm nữa:giveup:. Ai có ý gì thì inbox.
Dạ em cám ơn Anh rất nhiều. Cách này hay quá. Để mai em xem cái Ảnh minh họa của em lớn nhất xong đặt lại kích thước Form theo cách của Anh chắc là ổn rồi ạ
 
Upvote 0
Thôi tôi viết lần cuối.
Chú có thể biết quá nhiều về lập trình nhưng hình như không được cập nhật cũng như trải nghiệm nhiều về một số vấn đề kỹ thuật hiện tại thì phải.

Ảnh nếu được phóng to theo bội số nguyên (x1, x2, 3....) thì về nguyên lý vẫn có khả năng bảo đảm nguyên vẹn như ảnh gốc (nhưng tùy thuật toán có biết lợi dụng những trường hợp đó hay không).
vd. BMP thì chả có nguyên lý nào đảm bảo. Chỉ có vector graphics là cứu tinh.
Chú có thể chưa bao giờ làm về đồ họa nên hình như không biết độ phân giải màn hình ảnh hưởng đến chất lượng hiển thị như thế nào.
Tôi không bàn về đồ họa nói chung. Vì có những chương trình rất mạnh, và vì thế chúng có giá cao. Không phải vô cớ mà chúng có giá cao. Chúng có thể "chữa", "làm đẹp" những chỗ "mới phát sinh", những pixel phát sinh khi phóng to ảnh (raster).

Tôi bàn ở đây là bàn về nguyên nhân chính trong trường hợp cụ thể của tác giả. Và cố đưa ra giải pháp cho trường hợp cụ thể này. Tôi không bàn về đồ họa và các chương trình đồ họa nói chung. Bạn nói là ảnh trog Image1 "không nhìn được" là do màn hình? Và bạn đề xuất mua màn hình mới? Tôi tin chắc rằng sau khi mua màn hình mới thì ảnh trong Image1 vẫn không nhìn được. Lý do:
1. Ảnh gốc vốn không rõ từng nét, từng chữ.
2. Khi load ảnh vào Image1 thì VBA thực thi chứ không phải những chương trình đồ họa đắt tiền kia thực thi. Vì thế ảnh không thể "đẹp" như khi thao tác trong các chương trình đồ họa kia.

VBA khi xử lý ảnh khi load vào Image là a ma tơ chứ không phải chuyên gia như những chương trình đồ họa đắt tiền. Khi nguồn đã kém chất lượng và được xử lý bởi a ma tơ thì ảnh trong Image càng kém. Mà đã kém thì màn hình chỉ có thể giúp chút ít chứ không thể biến ảnh kém chất lượng thành ảnh chuẩn được.

Hướng đi đúng đắn không phải là mua màn hình mà là vector graphics và soạn ảnh nguồn có chất lượng cao. Đây chỉ là ý kiến chủ quan của tôi. Không áp đặt ai.

Bạn nghĩ là tôi không biết gì về đồ họa cũng được. Tôi cũng chả muốn tranh luận về đồ họa nói chung. Bạn hãy đưa ra giải pháp của mình để giúp chủ chủ đề giải quyết được vấn đề. Riêng tôi ngoài cái co dãn Form (cách đối phó) thì tôi đề nghị vector graphics và soạn nguồn có chất lượng cao.

Bạn đừng cho là tôi tranh luận để quyết thắng thua với ai. Bạn cứ nói quan điểm của mình, tôi cũng nói quan điểm của tôi. Nếu không đồng quan điểm thì cùng ký biên bản "những ý khác nhau" rồi dừng. Không cần ăn thua gì ở đây.

Tôi dừng tại đây.
 
Upvote 0
[QUOTE="
Cháu từng ngạc nhiên khi gặp 1 chú U50 tậu cho mình một cái màn hình CRT để làm đồ họa và càng ngạc nhiên hơn khi chú nói ra lý do là do cái màn LCD nó hiển thị không chuẩn, ảnh bị méo :shok:. [/QUOTE]
Hình như cái zụ này là do cái màn hình CRT nó hiển thị màu thực hớn áh
 
Upvote 0
Sorry bạn hoa lá!
Đến giờ mới tập trung đi vào cái file excel của bạn vì mải cuốn vô bàn luận lý thuyết xa xôi :sweatdrop:. Bạn xem thử cái file này có cải thiện được chút gì không nhé. Nguyên lý giải quyết của mình là:
  1. Hình có kích thước lớn hơn khung thì sẽ thu nhỏ lại vừa bằng khu hình.
  2. Hình có kích thước nhỏ hơn khung hình thì giữ nguyên kích thước 1:1 để chất lượng hiển thị được trung thực nhất.
Chú ý thuộc tính PictureAlignment, PictureAlignment để vận dụng về sau nhé.
Hiển nhiên là mình phải điều chỉnh lại kích cỡ form. Ngoài phần image mình có thêm chút tùy chọn ở GetFileList để giảm bớt file vô ích trong list.
Khả năng chỉ có nhiêu đó nên chắc không dám huyên thuyên thêm nữa:giveup:. Ai có ý gì thì inbox.
Vấn đề là giải quyết cho khung ảnh nhỏ như ban đầu chứ khung to thì dễ rồi. Trong bài của tôi là co dãn Form nhưng cũng có thể thiết kế Form to ngay từ đầu với Image1 to đùng thì không cần co dãn nữa. Thế thôi
 
Upvote 0
Hình như cái zụ này là do cái màn hình CRT nó hiển thị màu thực hớn áh
Giả sử được quay ngược lại thời điểm cách đây hơn 10 năm khi mà những cái màn hình CRT còn được sản xuất trong khi công nghệ màn hình LCD thì vẫn còn chưa phát triển nhiều thì một cái màn CRT mới tinh vẫn có chất lượng hình ảnh đủ đe 1 cái màn LCD mới khui.
Nhưng bây giờ nhìn 1 cái màn CRT 10 năm tuổi với màu sắc thì đã nhạt nhòa, đèn hình thì chớp chớp liên tục thì chưa kịp nhận ra là màu sắc có chuẩn không thì mắt đã hoa lên rồi o_O. Bây giờ kiếm được cái màn CRT còn sử dụng tốt thì khó hơn mò kim đáy bể. Nếu đem so với mấy em siêu mỏng IPS với Led đời mới thì chắc...
 
Upvote 0
Giả sử được quay ngược lại thời điểm cách đây hơn 10 năm khi mà những cái màn hình CRT còn được sản xuất trong khi công nghệ màn hình LCD thì vẫn còn chưa phát triển nhiều thì một cái màn CRT mới tinh vẫn có chất lượng hình ảnh đủ đe 1 cái màn LCD mới khui.
Nhưng bây giờ nhìn 1 cái màn CRT 10 năm tuổi (kiếm được cái màn CRT trẻ hơn thì khó hơn mò kim) với màu sắc thì đã nhạt nhòa, đèn hình thì chớp chớp liên tục thì chưa kịp nhận ra là màu sắc có chuẩn không thì mắt đã hoa lên rồi o_O.
hihi cái naỳ thì đúng rồi ý hihihihih
 
Upvote 0
Thôi thì dùng cách co dãn Form. :D

W module Form sửa thành
Mã:
Private w As Double, h As Double
...
Private Sub UserForm_Initialize()
    Pth = DefinenameValue("LinkfileMH")
    If CheckDir(Pth) = True Then
        Image1.PictureSizeMode = fmPictureSizeModeStretch
        If NameExists("LinkfileMH") = True Then
            PthMyfolder = Pth
            ListBox1.List = GetFileList(PthMyfolder)
        End If
    Else
        MsgBox "Kiem tra lai duong dan file anh minh hoa"
    End If
    Image1,Autosize = TRUE
    w = Image1.width
    h = Image1.height
End Sub

Private Sub ListBox1_Click()
    With ListBox1
        If .ListCount Then
            NameImage = .List(.ListIndex)
            Image1.Picture = LoadPictureGDI(Pth & "\" & .List(.ListIndex))
            If Image1.width > w Then
                Frame4.width = Image1.width + 108
                Me.width = Image1.width + 130
            Else
                Image1.width = w
                Frame4.width = w + 108
                Me.width = w + 130
            End If
            If Image1.height > h Then
                Frame4.height = Image1.height + 60
                Me.height = Image1.height + 94
            Else
                Image1.height = h
                Frame4.height = h + 60
                Me.height = h + 94
            End If
        End If
    End With
End Sub
Thầy cho hỏi copy code này vào phần nào vậy ạ? Thầy nói chi tiết giúp em mới!
Cảm ơn thầy!
 
Upvote 0
Upvote 0
Tôi viết ngay trong phần bạn trích mà


Bạn tải tập tin của chủ thớt rồi xem thì thấy code có trong 3 module: FunPicture, Module1, và module FrmMinhHoa (module Form)
Vâng,
Tôi viết ngay trong phần bạn trích mà


Bạn tải tập tin của chủ thớt rồi xem thì thấy code có trong 3 module: FunPicture, Module1, và module FrmMinhHoa (module Form)
Vâng, code trong "FrmMinhHoa" , nhưng sửa đoạn code nào thành đoạn code như thầy giúp.
Em tìm mà không thấy có đoạn code nào trong "FrmMinhHoa" mà có chứa
Mã:
Private w As Double, h As Double
...
 
Upvote 0
Vâng,

Vâng, code trong "FrmMinhHoa" , nhưng sửa đoạn code nào thành đoạn code như thầy giúp.
Em tìm mà không thấy có đoạn code nào trong "FrmMinhHoa" mà có chứa
Mã:
Private w As Double, h As Double
...
Những gì tôi viết (khai báo biến, sub) mà trong FrmMinhHoa chưa có thì thêm vào, còn nếu đã có thì thay bằng phiên bản của tôi. Thế thôi.
 
Upvote 0
Những gì tôi viết (khai báo biến, sub) mà trong FrmMinhHoa chưa có thì thêm vào, còn nếu đã có thì thay bằng phiên bản của tôi. Thế thôi.
Vâng, nhưng em thêm đoạn code sau vào Form thấy báo lỗi.
Thầy xem giúp em ạ!
Mã:
Private Sub UserForm_Initialize()
    Pth = DefinenameValue("LinkfileMH")
    If CheckDir(Pth) = True Then
        Image1.PictureSizeMode = fmPictureSizeModeStretch
        If NameExists("LinkfileMH") = True Then
            PthMyfolder = Pth
            ListBox1.List = GetFileList(PthMyfolder)
        End If
    Else
        MsgBox "Kiem tra lai duong dan file anh minh hoa"
    End If
    Image1,Autosize = TRUE
    w = Image1.width
    h = Image1.height
End Sub

Private Sub ListBox1_Click()
    With ListBox1
        If .ListCount Then
            NameImage = .List(.ListIndex)
            Image1.Picture = LoadPictureGDI(Pth & "\" & .List(.ListIndex))
            If Image1.width > w Then
                Frame4.width = Image1.width + 108
                Me.width = Image1.width + 130
            Else
                Image1.width = w
                Frame4.width = w + 108
                Me.width = w + 130
            End If
            If Image1.height > h Then
                Frame4.height = Image1.height + 60
                Me.height = Image1.height + 94
            Else
                Image1.height = h
                Frame4.height = h + 60
                Me.height = h + 94
            End If
        End If
    End With
End Sub
ab.png
 

File đính kèm

Upvote 0
Vâng, nhưng em thêm đoạn code sau vào Form thấy báo lỗi.
Thầy xem giúp em ạ!
Mã:
Private Sub UserForm_Initialize()
    Pth = DefinenameValue("LinkfileMH")
    If CheckDir(Pth) = True Then
        Image1.PictureSizeMode = fmPictureSizeModeStretch
        If NameExists("LinkfileMH") = True Then
            PthMyfolder = Pth
            ListBox1.List = GetFileList(PthMyfolder)
        End If
    Else
        MsgBox "Kiem tra lai duong dan file anh minh hoa"
    End If
    Image1,Autosize = TRUE
    w = Image1.width
    h = Image1.height
End Sub

Private Sub ListBox1_Click()
    With ListBox1
        If .ListCount Then
            NameImage = .List(.ListIndex)
            Image1.Picture = LoadPictureGDI(Pth & "\" & .List(.ListIndex))
            If Image1.width > w Then
                Frame4.width = Image1.width + 108
                Me.width = Image1.width + 130
            Else
                Image1.width = w
                Frame4.width = w + 108
                Me.width = w + 130
            End If
            If Image1.height > h Then
                Frame4.height = Image1.height + 60
                Me.height = Image1.height + 94
            Else
                Image1.height = h
                Frame4.height = h + 60
                Me.height = h + 94
            End If
        End If
    End With
End Sub
Rõ ràng mình viết tiếng Việt cho người Việt đọc ...

Trích
Những gì tôi viết (khai báo biến, sub) mà trong FrmMinhHoa chưa có thì thêm vào, còn nếu đã có thì thay bằng phiên bản của tôi.

Trong bài #5 tôi có
Mã:
Private w As Double, h As Double

Code của chủ thớt có không? Không có. Vậy thêm vào hay không thêm vào? Nếu thêm vào thì nó ở đâu, vì tôi cố tình đeo kính nhưng không tìm thấy.

Trong bài #5 tôi có
Mã:
Private Sub UserForm_Initialize()
    ...
End Sub

Private Sub ListBox1_Click()
    ...
End Sub
Trong code của chủ thớt đã có 2 sub UserForm_Initialize và ListBox1_Click này chưa? Nếu đã có rồi thì thêm code của tôi vào hay thay code cũ bằng code của tôi? Nếu là thay thì tại sao tôi thấy có 2 sub ListBox1_Click và 2 sub UserForm_Initialize?

Tôi dừng tại đây.
 
Upvote 0
Rõ ràng mình viết tiếng Việt cho người Việt đọc ...

Trích


Trong bài #5 tôi có
Mã:
Private w As Double, h As Double

Code của chủ thớt có không? Không có. Vậy thêm vào hay không thêm vào? Nếu thêm vào thì nó ở đâu, vì tôi cố tình đeo kính nhưng không tìm thấy.

Trong bài #5 tôi có
Mã:
Private Sub UserForm_Initialize()
    ...
End Sub

Private Sub ListBox1_Click()
    ...
End Sub
Trong code của chủ thớt đã có 2 sub UserForm_Initialize và ListBox1_Click này chưa? Nếu đã có rồi thì thêm code của tôi vào hay thay code cũ bằng code của tôi? Nếu là thay thì tại sao tôi thấy có 2 sub ListBox1_Click và 2 sub UserForm_Initialize?

Tôi dừng tại đây.
Em copy code vào vị trí dòng đầu tiên
Mã:
Private w As Double, h As Double
Và thay thế sub Private Sub UserForm_Initialize() Sub Private Sub ListBox1_Click() bằng code của thầy.
Toàn thể code em đã thêm và thay như sau:
Mã:
Private w As Double, h As Double
Private sArray, sArr, dArr, Pth As String
Private Sub Image4_Click()
    Call Linkfile
    PthMyfolder.Text = Pth
    ActiveWorkbook.Names.Add "LinkfileMH", Pth
Err:
End Sub
Private Sub ListBox1_Click()
    With ListBox1
        If .ListCount Then
            NameImage = .List(.ListIndex)
            Image1.Picture = LoadPictureGDI(Pth & "\" & .List(.ListIndex))
            If Image1.Width > w Then
                Frame4.Width = Image1.Width + 108
                Me.Width = Image1.Width + 130
            Else
                Image1.Width = w
                Frame4.Width = w + 108
                Me.Width = w + 130
            End If
            If Image1.Height > h Then
                Frame4.Height = Image1.Height + 60
                Me.Height = Image1.Height + 94
            Else
                Image1.Height = h
                Frame4.Height = h + 60
                Me.Height = h + 94
            End If
        End If
    End With
End Sub
Private Sub PthMyfolder_Change()
    If CheckDir(PthMyfolder) = True Then ListBox1.List = GetFileList(PthMyfolder)
End Sub
Private Sub UserForm_Initialize()
    Pth = DefinenameValue("LinkfileMH")
    If CheckDir(Pth) = True Then
        Image1.PictureSizeMode = fmPictureSizeModeStretch
        If NameExists("LinkfileMH") = True Then
            PthMyfolder = Pth
            ListBox1.List = GetFileList(PthMyfolder)
        End If
    Else
        MsgBox "Kiem tra lai duong dan file anh minh hoa"
    End If
    Image1 , AutoSize = True
    w = Image1.Width
    h = Image1.Height
End Sub
Private Sub UserForm_Terminate()
    Set dic = Nothing
End Sub
Sub Linkfile()
    On Error GoTo Err
    Application.FileDialog(msoFileDialogFolderPicker).Show
    Pth = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems.Item(1)
Err:
    Exit Sub
End Sub
Sub XoaName(SName As String)
    Dim Definename As Name
    For Each Definename In ThisWorkbook.Names
        If UCase(Definename.Name) = UCase(SName) Then Definename.Delete
    Next
End Sub
Function DefinenameValue(ByVal SName As String) As String
    Dim Definename As Name, Str As String
    For Each Definename In ThisWorkbook.Names
        If UCase(Definename.Name) = UCase(SName) Then
            Str = Replace(Definename.Value, "=", "")
            DefinenameValue = Replace(Str, """", "")
            Exit Function
        End If
    Next
    DefinenameValue = Str
End Function
Function NameExists(ByVal DFName As String) As Boolean
    On Error Resume Next
    Application.Volatile
    NameExists = CBool(Len(Names(DFName).Name))
End Function
Function CheckDir(Directory As String) As Boolean
    On Error GoTo ErrNotExist
    Call ChDir(Directory)
    CheckDir = True
    Exit Function
ErrNotExist:
    CheckDir = False
End Function
Và khi chạy Form thấy báo lỗi, nhờ thầy xem giúp em nốt vấn đề này ạ!
a2.png
 
Upvote 0
Em copy code vào vị trí dòng đầu tiên
Do gõ nhầm. Dòng tô vàng phải là Image1.AutoSize = True (dấu chấm chứ không phải dấu phẩy).

Nhưng thôi. Tôi đã chỉ sửa 2 sub của chủ thớt thôi. Bây giờ xem lại thấy họ làm lằng nhằng quá. Vd. dùng Name để ghi đường dẫn tới thư mục ảnh - đường dẫn được chọn khi nhấn nút.

Tôi soạn cho bạn code khác.

Những việc phải làm:
1. Trong tập tin 11111.xlsm xóa name LinkfileMH
2. Giữ nguyên 2 module là FunPicture và Module1.
3. Loại bỏ TextBox và nút ở dòng đầu tiên của Form
4. Xóa toàn bộ code trong module FrmMinhHoa và dán code sau vào.

Mã:
Private w As Double, h As Double

Private Sub UserForm_Initialize()
    Image1.PictureSizeMode = fmPictureSizeModeStretch
    ListBox1.List = GetFileList(ThisWorkbook.Path & "\image")
    Image1.AutoSize = True
    w = Image1.Width
    h = Image1.Height
End Sub

Private Sub ListBox1_Click()
    With ListBox1
        If .ListCount Then
            Image1.Picture = LoadPictureGDI(ThisWorkbook.Path & "\image\" & .List(.ListIndex))
            If Image1.Width > w Then
                Frame4.Width = Image1.Width + 108
                Me.Width = Image1.Width + 130
            Else
                Image1.Width = w
                Frame4.Width = w + 108
                Me.Width = w + 130
            End If
            If Image1.Height > h Then
                Frame4.Height = Image1.Height + 60
                Me.Height = Image1.Height + 94
            Else
                Image1.Height = h
                Frame4.Height = h + 60
                Me.Height = h + 94
            End If
        End If
    End With
End Sub

5. Lưu lại tập tin.

Lưu ý: Để có thể chạy code thì phải:
- có thư mục ảnh tên là image. Đặt các ảnh trong thư mục image.
- thư mục image và tập tin Excel phải ở cùng trong thư mục mẹ.
 
Upvote 0
Do gõ nhầm. Dòng tô vàng phải là Image1.AutoSize = True (dấu chấm chứ không phải dấu phẩy).

Nhưng thôi. Tôi đã chỉ sửa 2 sub của chủ thớt thôi. Bây giờ xem lại thấy họ làm lằng nhằng quá. Vd. dùng Name để ghi đường dẫn tới thư mục ảnh - đường dẫn được chọn khi nhấn nút.

Tôi soạn cho bạn code khác.

Những việc phải làm:
1. Trong tập tin 11111.xlsm xóa name LinkfileMH
2. Giữ nguyên 2 module là FunPicture và Module1.
3. Loại bỏ TextBox và nút ở dòng đầu tiên của Form
4. Xóa toàn bộ code trong module FrmMinhHoa và dán code sau vào.

Mã:
Private w As Double, h As Double

Private Sub UserForm_Initialize()
    Image1.PictureSizeMode = fmPictureSizeModeStretch
    ListBox1.List = GetFileList(ThisWorkbook.Path & "\image")
    Image1.AutoSize = True
    w = Image1.Width
    h = Image1.Height
End Sub

Private Sub ListBox1_Click()
    With ListBox1
        If .ListCount Then
            Image1.Picture = LoadPictureGDI(ThisWorkbook.Path & "\image\" & .List(.ListIndex))
            If Image1.Width > w Then
                Frame4.Width = Image1.Width + 108
                Me.Width = Image1.Width + 130
            Else
                Image1.Width = w
                Frame4.Width = w + 108
                Me.Width = w + 130
            End If
            If Image1.Height > h Then
                Frame4.Height = Image1.Height + 60
                Me.Height = Image1.Height + 94
            Else
                Image1.Height = h
                Frame4.Height = h + 60
                Me.Height = h + 94
            End If
        End If
    End With
End Sub

5. Lưu lại tập tin.

Lưu ý: Để có thể chạy code thì phải:
- có thư mục ảnh tên là image. Đặt các ảnh trong thư mục image.
- thư mục image và tập tin Excel phải ở cùng trong thư mục mẹ.
Vâng, em làm được rồi.
Cảm ơn thầy đã giúp đỡ em!
 
Upvote 0
Em xin Chào các Thầy(Cô); Anh(Chị) và các ạn trong diễn đàn. Chúc Thầy(Cô); Anh(Chị) và các Bạn có một ngày đầu tuần vui vẻ và hạnh phúc.
Hôm nay em có vấn đề này kính mong mọi người giúp đỡ:
Em muốn đưa ảnh vào trong khung Image của Form Excel . Mục đích là để chọn được hình vẽ sơ họa rồi chèn hình vẽ đó cho các nội dung công việc trong Biên bản kiểm tra
Hiện tại thì các công việc trên đã hoàn thành nhưng có 1 lỗi là khi ảnh được đưa vào khung Image của Form thì nó bị biến dạng không như hình vẽ ban đầu như thế này ạ (Nhiều Anh nó bị biến dạng không thể nhìn ra được hình vẽ ban đầu nữa :rolleyes:)
Hình 1 là hình ảnh
View attachment 208281
Hình 2 là hình đưa vào khung Image
View attachment 208282
Em xin đính kèm tệp tin . Vậy em kính mong Thầy(Cô); Anh(Chị) và các Bạn khắc phục lỗi trêm dùm em với ạ.
Em xin Chân thành cám ơn -\\/.


Không biết bạn xử lý được chưa? Việc phân giải không theo ý muốn do kích thước Image không cân xứng với Picture, dẫn tới bị co kéo. Cách xử lý như sau:
- Nên để ảnh đuôi có chất lượng tốt hơn, như bmp chẳng hạn thay vì png.
- Thiết lập thuộc tính PictureSizeMode = 0. Sau đó co kéo kích thước Image cho vừa khít. Nếu size của ảnh gốc không phù hợp (to hoặc bé quá) thì sửa file gốc nhé.

Picture in Image.jpg
 
Upvote 0
Không biết bạn xử lý được chưa? Việc phân giải không theo ý muốn do kích thước Image không cân xứng với Picture, dẫn tới bị co kéo. Cách xử lý như sau:
- Nên để ảnh đuôi có chất lượng tốt hơn, như bmp chẳng hạn thay vì png.
- Thiết lập thuộc tính PictureSizeMode = 0. Sau đó co kéo kích thước Image cho vừa khít. Nếu size của ảnh gốc không phù hợp (to hoặc bé quá) thì sửa file gốc nhé.

View attachment 229744
Thầy chỉnh ảnh nét, form thầy tạo chuyên nghiệp
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom