我想知道是否有人可以建議。我已經編寫了一個.NET 4 WCF服務,該服務旨在爲掃描的文檔提供服務,並努力讓Delphi 7使用者工作。將圖像從.NET傳輸到Delphi
在.NET方面,我將圖像轉換爲位圖,然後用下面的代碼字節數組:
using (Bitmap img = new Bitmap(fileName))
{
ImageConverter converter = new ImageConverter();
_bytes = (byte[])converter.ConvertTo(img, typeof(byte[]));
}
在消費者方面我想讀ByteArray傳遞到TImage.Picture這這個計劃已經失敗了。與
EInvalidGraphic與消息的「LoadFromStream」線下面的代碼的錯誤「的位圖圖像是無效」
procedure TBarcodeImageForm.FetchFile;
var
bytes : TByteDynArray;
info : TDocInfo;
Stream : TMemoryStream;
bmp : TBitMap;
begin
info := TDocInfo(FDocList.Items[lbFIles.ItemIndex]);
bytes := FDocButton.FetchDocument(info.FilePath).Data;
stream := TMemoryStream.Create();
try
Stream.Write(bytes[0], Length(Bytes));
Stream.Position := 0;
bmp := TBitMap.Create;
bmp.LoadFromStream(stream);
finally
Stream.Free;
end;
end;
通過代替存儲器流的使用TFileStream的上述我已經證明數據是有效的 - 那就是我可以將結果加載到MSPaint中。我不得不承認,我被困在下一步:Delphi 7是否過時,無法處理現代位圖?服務器端的文件是否與tiffs和jpgs相關?接下來我應該做什麼?
任何建議感激地收到。
UPDATE -------------------
我改變了代碼,使一個JPG正在跨過去了,結果非常相似。這次我嘗試加載圖像客戶端時出現JPEG錯誤#53。如果我使用TFileStream並保存到磁盤,則生成的文件在Windows圖片查看器中看起來很好,但仍不會加載到TImage組件中。
客戶端現在看起來是這樣
stream := TFileStream.Create('c:\temp.jpg', fmCreate);
try
Stream.Write(bytes[0], Length(Bytes));
Stream.Position := 0;
finally
Stream.Free;
end;
try
imgDocument.Picture.LoadFromFile('c:\temp.jpg');
except end;
服務器端(發佈整個數據契約這個時候萬一)
[DataContract]
public class ImageData
{
private byte[] _bytes;
[DataMember]
public byte[] Data
{
get { return _bytes; }
set { _bytes = value; }
}
public ImageData(string fileName)
{
using (MemoryStream memStream = new MemoryStream())
{
using (Image img = Image.FromFile(fileName))
{
img.Save(memStream, ImageFormat.Jpeg);
}
_bytes = new Byte[memStream.Length];
int i = 0;
while (i < memStream.Length)
i += memStream.Read(_bytes, i, 128000);
}
}
}
UPDATE ----------- -------------------------------------------------- ----
對Winforms使用者的服務進行的成功測試使用了以下代碼。
if (docList != null)
{
using (MemoryStream memStream =
new MemoryStream(client.FetchDocument(docList.Items[0].FilePath).Data))
{
System.Drawing.Image img = Image.FromStream(memStream);
pictureBox1.Image = img;
}
}
它總是幫助張貼問題實際上是什麼。如果基於代碼,然後顯示你有什麼。如果以設計爲基礎,告訴我們你在想什麼。 – NotMe 2012-08-11 01:19:22
對不起,我早在我準備好之前就提出了這個問題 – 2012-08-11 01:37:33
@Ken White - 是的道歉 – 2012-08-11 01:44:50