비슷한 질문이 있지만 이진 열의 이미지 저장과 관련하여 질문이 있다는 것을 알고 있습니다.저장시 이진 열의 Jpeg 이미지를 다시 인코딩하는 중
Linq2SQL을 사용하여 SQL Compact Team의 그림 상자 컨트롤에 이미지를로드하는 작은 창 폼 앱이 있습니다. 사용자는 그림 상자에서 이미지 (jpg, bmp, gif)를 드래그 할 수 있습니다. DragDrop-Event에서 이미지가 그림 상자에로드됩니다. 나는 다음과 같은 코드가 PictureBox 컨트롤의 이미지를 저장하기 위해 실행되는 기록을 저장할 때 : 나는 바이트 배열의 크기를 확인하고 그 기록을 저장 한 후 변경하지 않은
MemoryStream imgStream = new MemoryStream();
pictureBox1.Image.Save(imgStream, System.Drawing.Imaging.ImageFormat.Jpeg);
myTable.MyImage = imgStream.ToArray();
합니다. Save-Method가 호출 될 때마다 이미지가 다시 인코딩됩니까? 아마도 이미지가 전혀 변경되지 않았는지 확인하는 것이 좋습니다.
덕분에 솔루션을 찾을 수있었습니다. 바이트 배열 (이전 이미지와 현재 인코딩 된 것)을 SequenceEqual과 비교합니다. '경우는 (myTable.MyImage == null이 는 || myTable.MyImage.ToArray() SequenceEqual는 (imgStream.ToArray())!.) 는 myTable.MyImage = imgStream.ToArray(); '는 – fnx
내 마지막 코멘트가 있다고 가정 바이트 [] 압축 된 이미지 (저장시)는 db의 바이트 []와 동일합니다. 디버깅 할 때 이미지가 변경되지 않으면 바이트 []가 실제로 동일하다는 것을 알았습니다. 이미지를 항상 jpg로 저장했기 때문일 수 있습니까? – fnx
JPEG 압축의 "손실"부분은 데이터가 실제로 압축되기 전에 발생하며 압축기는 데이터가 이미 압축 할 수있는 간단한 형식으로되어 있는지 파악할만큼 똑똑해야합니다 (SHOULD). 따라서 이미지를 단순화하기 위해 정보가 버려지는 초기 변환 이후에 기본적으로 얻는 것은 압축을 풀고 다시 압축하여 저장하는 ZIP 파일입니다. 이미지가 변경되지 않는 한이 작업을 무기한 수행 할 수 있습니다. – KeithS