대용량 이미지 데이터베이스의 해시 값 계산에 PHASH를 사용하고 있습니다. 이러한 이미지는 고해상도이므로 해시를 빠르게 계산할 수 있도록 이미지의 크기를 조정해야합니다."보호 된 메모리를 읽거나 쓰려고 시도했습니다."라는 오류 메시지가 나타나는 이유는 무엇입니까? C에서 이미지 크기를 조정 한 후 #?
그러나 이미지 크기를 조정하면 PHASH 프로그램에서 오류가 발생합니다. 크기를 조정하지 않으면 PHASH 프로그램이 정상적으로 작동합니다.
내 크기 조정 코드는 다음과 같습니다.
public void ResizeImage(string ImagePath, int width, int height, string newPath)
{
Bitmap b = new Bitmap(width, height);
using (Graphics g = Graphics.FromImage((Image)b))
{
FileStream fs = new FileStream(ImagePath, FileMode.Open);
Image img = Image.FromStream(fs);
g.DrawImage(img, 0, 0, width, height);
fs.Close();
}
b.Save(newPath);
b.Dispose();
}
오류는 "보호 된 메모리를 읽거나 쓰려고 시도했습니다."입니다.
phash 코드는 다음과 같습니다 :
ph_dct_imagehash(imagePath, ref hash);
위의 기능은 C++ 프로그램을 호출하고 나에게 해당 이미지에 대한 해시 값을 반환합니다. 이미지가 프로그래밍 방식으로 크기가 조정되지 않으면 잘 동작합니다. MS 페인트를 사용하여 이미지의 크기를 조정하면 잘 작동합니다.
여기서 phash 코드는 무엇입니까? – techno
@techno, 질문을 업데이트했습니다. –
유효 크기가 조정 된 이미지를 저장했다는 것을 확인했다고 가정하면 어두운 곳에서 촬영됩니다. interop 경계를 원시 코드로 넘어 가면 조기 가비지 수집에 노출됩니다. 'ph_dct_imagehash' 호출 후에'GC.KeepAlive (imagePath)'를 추가하십시오. –