2011-01-21 3 views
1

이미지 생성을위한 도우미를 만들고 싶습니다. 우리는 이것을 C# 솔루션에 추가 할 것입니다. 그러나 나는 백엔드 개발자가 아니므로, 그냥 더미 예제를 만들고 여기 내 자신의 말로 설명 할 것입니다 :-)즉시 이미지 생성을위한 알고리즘 도움말

업데이트 : 내가 도움이 필요한 것은 각각에 대한 배율을 계산하는 방법입니다 아래의 시나리오를 참조하십시오. 예 : 60x60 썸네일 위치 지정자가 있고 원본 이미지가 400x300 인 경우 300을 60으로 설정하고 그에 따라 400을 변경해야합니다.

도우미는 다음과 같이 보일 것입니다 :

:

HelperName('OriginalImageUrl', 'FileName', X, Y, M) 

M이 나는 그것이 ..에서 계산하는 너비 또는 높이를 사용할지 여부를 결정하는 데 필요한 추측 모드이며, 여기에는 시나리오입니다

Thumnails (square) : 너비와 높이가 같기 때문에 가장 짧은 이미지 크기를 사용해야합니다.

ImagePlaceholder (대부분 직사각형) : 정적 높이/너비. 이미지는 높이/너비를 모두 채워야하므로 자리 표시 자에 빈 영역이 나타나지 않습니다. 치수 중 하나에서 과도한 것이 잘립니다. 너비가! = 높이 인 경우 치수를 검사하여 축소판 그림과 결합 할 수 있습니다.

PhotoWrapper : 최대 높이/너비. 전체 이미지는 이러한 비율에 맞게 조정됩니다. 자르기 작업이 없으며 주어진 컨테이너 크기에 맞게 크기를 조정할 수 있습니다.

누군가 내가 이것을 도울 수 있거나 내가 사용할 수있는 플러그인을 알고 있다면 정말 좋을 것입니다.

+0

질문이 무엇인지는 명확하지 않습니다. –

+0

확실하지 않은 점은 무엇입니까? 인터페이스를 조작하는 방법? 아니면 구체적인 구현? 또한 우리는 당신의 이익을 위해 여기에 서지 않으므로 최소한 당신의 솔루션을 먼저 찾아서 시도해야합니다.그렇다면 구체적인 문제가 있다면 우리에게 물어보십시오. – Euphoric

+0

문제는 인터페이스 나 구현이 아니라 피팅/채우기를 계산하는 방법입니다 (아래 답변 참조). Stackoverflow는 나 자신을 위해 노력하고 연구를 한 후에 항상 최후의 수단이됩니다. 누군가가 나를 도울 때까지 기다리는 것이 아니라 그곳에서 일을 해결하기를 원합니다. 또한 나는 다른 곳에서는이 답변을 찾을 수 없었으므로 이제이 문제를 가진 다음 사람이 당신을 괴롭히지 않을 것입니다 : P – olemarius

답변

2

스케일링 팩터를 계산 한 다음 입력/출력 사각형을 계산할 수 있습니다.

피팅 : 이런 식으로 뭔가를 (그것을 테스트하지 않았다)이어야한다

double scaleX=(double)targetWidth/(double)originalWidth; 
double scaleY=(double)targetHeight/(double)originalHeight; 

double scaleToFit=Math.Min(scaleX,scaleY); 

double newWidth=scaleToFit*originalWidth; 
double newHeight=scaleToFit*originalHeight; 

double borderX=(targetWidth-newWidth)/2; 
double borderY=(targetHeight-newHeight)/2; 

Rect InputRect=new Rect(0,0,originalWidth,originalHeight); 
Rect OutputRect=new Rect(borderX,borderY,targetWidth-2*borderX,targetHeight-2*borderY); 

충전물 : 내가 두 이미지를 가지고 기능이 블리트 생각

double scaleX=(double)targetWidth/(double)originalWidth; 
double scaleY=(double)targetHeight/(double)originalHeight; 

double scaleToFill=Math.Max(scaleX,scaleY); 

double oldWidth=targetWidth/scaleToFill; 
double oldHeight=targetHeight/scaleToFill; 

double cropX=(originalWidth-oldWidth)/2; 
double cropY=(originalHeight-oldHeight)/2; 

Rect OutputRect=new Rect(0,0,targetWidth,targetHeight); 
Rect InputRect=new Rect(cropX,cropY,oldWidth,oldHeight); 

, 2 개의 직사각형 . 그 중 하나를 사용하십시오.

+0

굉장하고 정확하게 내가 찾고있는 것 :) 채우기와 피팅은 용어의 좋은 선택이었습니다. 내 작품과 비교하면 P : 나는이 작품이 있다면 알려주지 :) – olemarius

+0

흠, 한 가지 ..이게 원래 이미지의 크기를 고려할 것인가? – olemarius

+0

그래서 originalWidth와 originalHeight로 시작합니다. 물론 버그가있을 수 있습니다. – CodesInChaos

0
  1. 로드합니다 byte[]
  2. 에 URL의 이미지는 byte[]
  3. 에서 Image 디스크에 Image
  4. 저장 Image을 조작하고 URL을 제공하거나 웹 핸들러를 통해 직접 스트리밍 만들기

byte[]Stream으로 바꿀 수 있습니다.