문제

내가 필요로 변환하는 비트맵 이미지와 그들의 4 개 모서리 점으로 이동 한 위치에서 다른 있습니다.

모든 코드를 실행할 수 있는 윈도우에서,C#/VB.순이 바람직하게도,도움말을 사용하는 방법 스크립트와 같은 프로그램 Paint.NET포토샵 받아들여지지 않을 것입니다.Java Advanced Imaging API 소리를 희망을 갖고 있습니다.

나는 그것을 필요한 조작이 스크린샷 시스템을 얻을 수 있는 그러한 효과:

alt text
(출처: wholetomato.com)

도움이 되었습니까?

해결책

확인하십시오 관점 뒤틀림 의 예 Imagemagick. 대부분의 주류 플랫폼에서 사용할 수 있습니다.

다른 팁

여기 키워드는입니다 동종 조영술. Manolis Lourakis는 사용할 수있는 C로 GPL'ed Homography 구현을 작성했습니다. 여기; 그러나 이것은 다음과 같은 일부 외부 라이브러리에 의존하기 때문에 매우 쉽게 포팅 할 수 없습니다. 라크.

면책 조항 : 나는 Atalasoft에서 일합니다

상업적으로 가려면 DotImage 사진이 사변형 전신과 함께이 작업을 수행 할 수 있습니다. 샘플 C# 코드

// Load an image.
AtalaImage image = new AtalaImage("test-image.jpg");

// Prepare the warp positions.
Point bottomLeft = new Point(100, image.Height - 80);
Point topLeft = new Point(130, 45);
Point topRight = new Point(image.Width - 60, 140);
Point bottomRight = new Point(image.Width - 20, image.Height);

// Warp the image.
QuadrilateralWarpCommand cmd = new QuadrilateralWarpCommand(bottomLeft,
   topLeft, topRight, bottomRight, InterpolationMode.BiLinear, Color.White);
AtalaImage result = cmd.Apply(image).Image;

http://www.atalasoft.com/products/dotimage

보다 쉽게 시뮬레이션 관점을 왜곡을 사용하여 이미지를 조작,사용할 수 있습 OpenGL 또는 다이렉트(XNA)를 실제로 수행한 관점을 표시합니다.

렌더링하고 간단한 쿼드와 당신의 이미지로의 질감 지도입니다.설치,현장 렌더링을 버퍼,당신은 당신의 이미지입니다.

업데이트 는 것이 밝혀졌 XNA 입니다 말도 안되는 라이브러리(으로 설치된 게임을 만드는 아무 것도,하).다이렉트 관리를 필요 뇌 절제술.OpenGL 사용하기 쉬운,그러나 부족한 이미지를 읽지 코드입니다.우리 나뭇잎과 WPF:

체 텍스트 http://praeclarum.org/so/persp.png

이미지를 개선할 수 있을 강제로 WPF 로 anti-alias 모드(왜 오 왜 마이크로소프트는 당신도 짧은 시력?), 여 사용하지 않는 에어로 유리에는 힘 1 픽셀에 검은색 테두리 모든 스크린샷(거나 제거하여는 1 픽셀 국경).

(미안한 길이의 이 코드는,하지만 WPF 이 말 많습니다.)

public partial class Window1 : Window {
    const float ANGLE = 30;
    const float WIDTH = 8;
    public Window1() {
        InitializeComponent();

        var group = new Model3DGroup();
        group.Children.Add(Create3DImage(@"C:\Users\fak\Pictures\so2.png"));
        group.Children.Add(new AmbientLight(Colors.White));

        ModelVisual3D visual = new ModelVisual3D();
        visual.Content = group;
        viewport.Children.Add(visual);
    }

    private GeometryModel3D Create3DImage(string imgFilename) {
        var image = LoadImage(imgFilename);

        var mesh = new MeshGeometry3D();
        var height = (WIDTH * image.PixelHeight) / image.PixelWidth;
        var w2 = WIDTH / 2.0;
        var h2 = height / 2.0;
        mesh.Positions.Add(new Point3D(-w2, -h2, 0));
        mesh.Positions.Add(new Point3D(w2, -h2, 0));
        mesh.Positions.Add(new Point3D(w2, h2, 0));
        mesh.Positions.Add(new Point3D(-w2, h2, 0));
        mesh.TriangleIndices.Add(0);
        mesh.TriangleIndices.Add(1);
        mesh.TriangleIndices.Add(2);
        mesh.TriangleIndices.Add(0);
        mesh.TriangleIndices.Add(2);
        mesh.TriangleIndices.Add(3);
        mesh.TextureCoordinates.Add(new Point(0, 1)); // 0, 0
        mesh.TextureCoordinates.Add(new Point(1, 1));
        mesh.TextureCoordinates.Add(new Point(1, 0));
        mesh.TextureCoordinates.Add(new Point(0, 0));

        var mat = new DiffuseMaterial(new ImageBrush(image));
        mat.AmbientColor = Colors.White;

        var geometry = new GeometryModel3D();
        geometry.Geometry = mesh;
        geometry.Material = mat;
        geometry.BackMaterial = mat;

        geometry.Transform = new RotateTransform3D(
            new AxisAngleRotation3D(new Vector3D(0,1,0), ANGLE),
            new Point3D(0, 0, 0));

        return geometry;
    }

    public static BitmapSource LoadImage(string filename) {
        return BitmapDecoder.Create(new Uri(filename, UriKind.RelativeOrAbsolute),
            BitmapCreateOptions.None, BitmapCacheOption.Default).Frames[0];
    }
}

고 필요한 XAML:

<Window x:Class="Persp.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Perspective Window" Height="480" Width="640">
<Grid>
    <Viewport3D x:Name="viewport">
        <Viewport3D.Resources>
        </Viewport3D.Resources>
        <Viewport3D.Camera>
            <PerspectiveCamera x:Name="cam"
                  FarPlaneDistance="100"
                  LookDirection="0,0,-1"
                  UpDirection="0,1,0"
                  NearPlaneDistance="1"
                  Position="0,0,10"
                  FieldOfView="60" />
        </Viewport3D.Camera>
    </Viewport3D>
</Grid>
</Window>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top