이미지 격자를 균등하게 분할하고 이미지의 중심을 유사도에 따라 정렬하는 응용 프로그램을 개발 중입니다. 지금까지는 작은 크기의 이미지 격자를 수정할 수 있었지만 큰 "스프라이트"크기 (예를 들어 100x100)를 시도 할 때마다 Stack Overflow 오류가 발생합니다.C# - 이미지의 경계 찾기 (크기가 아님)
예 재귀를 사용하고 있지만 픽셀을 선택할 때마다 목록이 채워질 때까지 불투명도를 설정하여 목록을 복사하고 목록으로 복사 한 다음 나머지를 검사합니다 (모든 방향으로). 그리드의 이미지. 나는 이것이 각 호출 이후로 가장 좋은 방법인지 확실하지 않다. 나는 같은 방법을 7 번 호출한다. (체크되지 않은 7 개의 인접한 픽셀이 있다고 가정한다.) 체크 할 픽셀이 없을 때까지. 그리드의 다음 이미지로 이동할 수 있습니다.
오류가 발생하기 시작한 곳을 추적하려고했는데, 더 많거나 적은 1600 픽셀을 확인하고 목록에 추가 한 후였습니다. MyPixel 4 개 변수를 포함하는 클래스이다 : X (INT), Y (INT), 색 (색상), 및 선택 (BOOL)
public void processSprite(int i, int j)
{
//OOO
//OXO
//OOO
pixeltemp.Add(new MyPixel(imap.pixels[i, j].x, imap.pixels[i, j].y, imap.pixels[i, j].color));
imap.pixels[i, j].read = true;
//OOO
//OOX
//OOO
try
{
if (!imap.pixels[i + 1, j].read)
{
if (imap.pixels[i + 1, j].color.A == 0) //Found a Border
{
imap.pixels[i + 1, j].read = true;
}
else
{
processSprite(i + 1, j);
}
}
}
//... (code goes on)
}
- pixeltemp 이미지를 보유 화소의 임시리스트이다
(List<MyPixel>)
- IMAP은 전체 이미지
(List<MyPixel>)
내 응용 프로그램은 단지 16메가바이트 상판 정도 걸립니다 이후에 메모리 문제가없는 것 같아요 포함되어 있습니다.
무한 재귀가 아니라면 왜 내 "스택 오버플로"오류가 발생합니까? 이 작업을 수행하는 더 쉬운 방법이 있습니까? 제 코드가보기 흉한 것처럼 보입니다. 어떻게 코드를 더 잘 만들지 모릅니다.
미리 감사드립니다.
나는 당신이 성취하려는 것을 잘 따르지 않습니다. 당신은 큰 이미지를 가져 와서 동등한 크기의 덩어리로 나눕니다. –
@ 루카스 나는 하나의 이미지에서 다른 사진의 그리드를 가지고있다. 예를 들어 크기가 10x10 픽셀 인 100 개의 이미지가있는 100x100 크기의 제가 이미지 격자를 가지고 있다고 가정 해 봅시다. 그러나 그것들은 정렬되지 않았고 다른 크기를 가지고 있습니다 : 저는 그것들을 모두 같은 크기로 만들고 픽셀 유사성에 따라 정렬하려고합니다. –