2012-04-17 31 views
8

Tôi có một số tệp hình ảnh được lưu trữ trong một tệp (một số loại tệp lưu trữ). tập tin đó trông như thế này:Dòng dữ liệu JPEG tới TImage

enter image description here

Vâng, nó tách thành hai đoạn - header và dữ liệu phân khúc. Tiêu đề (màu lục) chứa thông tin khác nhau, chẳng hạn như tên album, vị trí, ngày/giờ, mô tả, số lượng ảnh trong album, v.v. Dữ liệu (màu xanh & cam) có cấu trúc đơn giản và chứa N x ảnh JPEG. Tôi có thể trích xuất phân đoạn "imagedata" đó vào đối tượng TMemoryStream mới và bây giờ tôi muốn hiển thị nó bằng TImage.

Tôi có thể sử dụng SaveAsFile phương thức TMemoryStream, đặt một số tên tệp tạm thời, tải tệp đó từ TImage và sau đó xóa tệp tạm thời. Điều đó làm việc, nhưng tôi tự hỏi là có bất kỳ cách nào để gửi dòng đó vào TImage w/out bằng cách sử dụng temp. các tập tin.

Tất nhiên, tôi có thể viết mã để trích xuất tất cả các tệp trên đĩa cứng nhưng vấn đề là tôi có rất nhiều lưu trữ như thế này và chỉ muốn viết ứng dụng để đọc "album" đó thay vì có hơn 20.000 ảnh trên ổ cứng của tôi.

Nói tóm lại, tất cả tôi muốn là làm theo thủ tục làm việc (w/ra sử dụng temp. File)

procedure ShowImageFromStream(data: TStream; img: TImage); 
begin 
... 
end; 

Cảm ơn trước.

Trả lời

18

Tôi không chắc chắn nếu đó là những gì bạn đang tìm kiếm, nhưng mã này nên tải file JPEG từ suối vào thành phần TImage đưa ra:

uses 
    JPEG; 

procedure ShowImageFromStream(AImage: TImage; AData: TStream); 
var 
    JPEGImage: TJPEGImage; 
begin 
    AData.Position := 0; 
    JPEGImage := TJPEGImage.Create; 
    try 
    JPEGImage.LoadFromStream(AData); 
    AImage.Picture.Assign(JPEGImage); 
    finally 
    JPEGImage.Free; 
    end; 
end; 
+1

+1 tên var hơi khác nhưng chỉ giống như Tôi đã gõ, tôi cần phải học cách gõ nhanh hơn. – Dampsquid

+2

MY GOD, ngay cả khi tôi đã sử dụng TJPEGImage trước đây, tôi đã hoàn toàn bỏ lỡ phương thức LoadFromStream !? Cảm ơn rất nhiều, đó là nó. – Wh1T3h4Ck5

+0

Vui mừng được giúp đỡ ;-) – TLama

Các vấn đề liên quan