누구든지 조언 할 수 있는지 궁금합니다. 필자는 스캔 한 문서를 제공하기위한 .NET 4 WCF 서비스를 작성했으며 델파이 7 소비자가 작업하기 위해 고심하고 있습니다. 나는 TImage.Picture로 된 ByteArray를 읽고 싶은 소비자 측면에서.NET에서 Delphi로 이미지 전송
using (Bitmap img = new Bitmap(fileName))
{
ImageConverter converter = new ImageConverter();
_bytes = (byte[])converter.ConvertTo(img, typeof(byte[]));
}
이 : 나는 비트 맵에 다음 코드를 사용하여 바이트의 배열로 이미지를 변환하고있는 .NET 측면에서
계획이 세워진 곳입니다. 내가 보여준 위EInvalidGraphic 메시지와 함께 'LoadFromStream'라인에 다음 코드 오류 메모리 스트림 대신에 TFileStream을 사용함으로써
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;
'비트 맵 이미지가 유효하지 않습니다' 데이터가 유효하다는 것입니다. 즉 MSPaint에서 결과를로드 할 수 있습니다. 나는 다음 단계로 나아갈 수밖에 없다는 것을 인정해야한다 : 델파이 7은 현대의 비트 맵을 처리하기에는 구형인가? 사실 서버 측의 파일은 tiff이고 jpg는 관련이 있습니까? 다음에 무엇을해야합니까?
감사의 말을 전합니다. jpg이가 건너 전달되는되었고, 그 결과가 매우 유사 있도록
UPDATE는 -------------------
나는 코드를 변경. 이번에는 이미지를 클라이언트 측에서로드하려고 시도 할 때 JPEG 오류 # 53이 발생합니다. TFileStream을 사용하고 디스크에 저장하면 결과 파일은 Windows Picture Viewer에서 잘 보이지만 TImage 구성 요소에는로드되지 않습니다.
클라이언트 측 지금 -----------
[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 (전체 데이터 계약의 경우이 시간을 게시)이
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;
서버 측 같습니다 -------------------------------------------------- ----
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;
}
}
그것은 항상 문제가 실제로 무엇을 게시하는 데 도움이 :이 Delphi7 나를 위해 일하는 대신 일반 TImage의로로드하려고의)
이미지가 반환되는 경우는 이펙이었다. 코드를 기반으로한다면, 가지고있는 것을 보여주십시오. 디자인을 기반으로한다면, 생각하고있는 것을 말해주십시오. – NotMe
나는 준비가되기 오래 전부터 질문을 던졌습니다. –
@Ken White - 예 사과 –