0

助けてくださいㅠㅠ

ImageEditorを作っています。しかし、画像回転機能について質問があります。

画像を読み込んでから回転させると、回転機能が非常にうまく機能します。

しかし、ロードされた画像のサイズ変更(幅、高さ)の後、作業を​​ばかげて回転させます...

Pixed Imageの幅、高さ、画像のコンテンツのみを回転させます。

その結果、画質が低下します...

これはスクリーンショットです。

ああ..画像を投稿できません..評判の制限のため...:-<

http://blog.naver.com/hago89n/150164439917

私のブログにアクセスして、スクリーンショットを確認してください。

私の問題を理解できますか?

ええと、コードはここにあります

//ボタンクリックハンドラーのサイズを変更します

private function btn_resize_clickHandler(event:MouseEvent):void
{
        image.width = parseInt(ti_width.text.toString());
    image.height = parseInt(ti_height.text.toString());
}

//ボタンクリックハンドラーを回転します

private function btn_rotateCCW_clickHandler(event:MouseEvent):void
{//Rotate Counter ClockWise
    var o_rotateimage:RotateImage = new RotateImage();
    o_rotateimage.rotateCCW(image);
}

//RotateImage.asのRotate関数

public function rotateCCW(image:Image):void
{
    m = new Matrix();    
    m.rotate(Math.PI/2);
    m.tx = image.height;
    var bd:BitmapData = new BitmapData(image.height as int, image.width as int);
    bd.draw(image, m);
    image.source = new Bitmap(bd);
}
4

1 に答える 1

0

両方の操作で行列変換を行う必要があると思います。Imageオブジェクトのサイズを変更しただけでは、すべての状況で正常に機能するとは限りません。

これがこの例の私のコードです。

//応用

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" 
           minWidth="955" minHeight="600">

<fx:Script>
    <![CDATA[
        import com.imageeditor.RotateImage;

        [Embed(source="/assets/img/chart.png")]
        [Bindable]
        public var chartPng:Class;

        private var o_rotateimage:RotateImage = new RotateImage();

        private function btn_resize_clickHandler(event:MouseEvent):void
        {
            o_rotateimage.scale(image, int(ti_width.text)/image.width, int(ti_height.text)/image.height);
        }

        private function btn_rotateCCW_clickHandler(event:MouseEvent):void
        {
            o_rotateimage.rotateCCW(image);
        }
    ]]>
</fx:Script>

<s:VGroup x="10" y="10">
    <s:HGroup>
        <s:TextInput id="ti_width" text="300" width="40"/>
        <s:TextInput id="ti_height" text="200" width="40"/>

        <s:Button label="Resize" click="btn_resize_clickHandler(event)"/>
        <s:Button label="Rotate" click="btn_rotateCCW_clickHandler(event)"/>
    </s:HGroup> 
    <s:HGroup width="800" height="600" horizontalAlign="center" verticalAlign="middle">
        <s:Image id="image" source="{chartPng}" width="600" height="400"/>
    </s:HGroup>

</s:VGroup>
</s:Application>

//RotateImage.as

package com.imageeditor
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Matrix;

import spark.components.Image;

public class RotateImage
{
    private var m:Matrix;

    public function rotateCCW(image:Image):void
    {
        var w:int = image.width;
        var h:int = image.height;

        m = new Matrix();    
        m.rotate(Math.PI/2);
        m.tx = image.height;
        var bd:BitmapData = new BitmapData(image.height as int, image.width as int);
        bd.draw(image, m);

        image.width = h;
        image.height = w;

        image.source = new Bitmap(bd);
    }

    public function scale(image:Image, kx:Number, ky:Number):void
    {
        var w:int = image.width;
        var h:int = image.height;

        m = new Matrix();  
        m.scale(kx, ky);

        var bd:BitmapData = new BitmapData(w*kx as int, h*ky as int);
        bd.draw(image, m);

        image.width = w*kx;
        image.height = h*ky;

        image.source = new Bitmap(bd);
    }
}
}
于 2013-04-02T10:05:31.793 に答える