2D图形截取

从昨天开始 学第九章内容   ,寒假放假之前必须过一遍!


今天做的是2D的图片处理截取 ,虽然不是太难但是注意的点多了,以后没准能用得到,记下来吧。

1、 XML

<span style="font-size:18px;color:#ff6600;"><?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout_1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 >

    <ImageView
        android:layout_marginTop="0dp"
        android:id="@+id/imageview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

    <TextView
        android:id="@+id/textviewshow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示坐标"
        android:textSize="20dp"
        android:textColor="@color/colorAccent"
        android:layout_gravity="left|bottom" />
</FrameLayout></span><span style="color:#ff0000;">
</span>



2、Java (一个)


<span style="font-size:14px;"><span style="color:#ff0000;">
</span><span style="color:#ff9900;">import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;</span><span style="color:#ff0000;">

</span><span style="color:#ff9900;">import org.w3c.dom.Text;</span><span style="color:#ff0000;">

</span><span style="color:#993300;">public class MainActivity extends AppCompatActivity {
    private FrameLayout frameLayout;
    private ImageView imageView;
    private TextView textViewshow;

    </span><span style="color:#ffcc00;">@Override</span><span style="color:#993300;">
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        frameLayout = (FrameLayout)findViewById(R.id.frameLayout_1);
        imageView = (ImageView)findViewById(R.id.imageview);
        textViewshow = (TextView)findViewById(R.id.textviewshow);

        frameLayout.addView(new MyView(this));
        </span><span style="color:#009900;">/**坐标显示方便调整图像大小
         * */</span><span style="color:#993300;">
        frameLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                float x = event.getRawX();
                float y = event.getRawY();
                textViewshow.setText("当前坐标  X_" + x + "  " + "Y_" + y);
                return false;
            }
        });
    }
    public class MyView extends View
    {
        public MyView(Context context)
        {
            super(context);
        }

        </span><span style="color:#ffcc00;">@Override</span><span style="color:#993300;">
        protected void onDraw(Canvas canvas) {
            Paint paint = new Paint();
            String path = </span><span style="color:#ff0000;">"/data/NewFile/a3.jpg"</span><span style="color:#993300;">;</span><span style="color:#000066;">//自己需要往文件夹中放一张图片,路径还要加上png or jpg.</span><span style="color:#993300;">
            Bitmap bitmap = BitmapFactory.decodeFile(path);</span><span style="color:#009900;">//获取通过解码得到的位图</span><span style="color:#993300;">
            </span><span style="color:#009900;">/**
             * public static Bitmap decodeFile (String pathName)

             Decode a file path into a bitmap. If the specified file name is null, or cannot be decoded into a bitmap, the function returns null.
             Parameters
             pathName	complete path name for the file to be decoded.
             Returns
             the resulting decoded bitmap, or null if it could not be decoded.
             * */</span><span style="color:#993300;">
            canvas.drawBitmap(bitmap,0,30,paint);</span><span style="color:#33cc00;">//将获取的Bitmap对象绘制在画布上指定位置</span><span style="color:#993300;">
            Rect src = new Rect(95,50,75,300);</span><span style="color:#009900;">//设置挖取的区域  可以为空,那么将整个照片进行截取show</span><span style="color:#993300;">
            Rect dst = new Rect(420,30,500,120);</span><span style="color:#009900;">//设置绘制的区域</span><span style="color:#993300;">
            canvas.drawBitmap(bitmap, src, dst, paint);</span><span style="color:#009900;">//绘制挖取到的图像</span><span style="color:#993300;">
            </span><span style="color:#009900;">使用颜色数组创建一个Bitmap对象</span><span style="color:#993300;">
            Bitmap bitmap_1 = Bitmap.createBitmap(new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.MAGENTA},4,1, Bitmap.Config.RGB_565);
            imageView.setImageBitmap(bitmap_1);
            super.onDraw(canvas);
        }
    }

   </span><span style="color:#ffcc00;"> @Override</span><span style="color:#993300;">
    protected void onDestroy() {
        BitmapDrawable b = (BitmapDrawable)imageView.getDrawable();
        if(b!= null && !b.getBitmap().isRecycled())
        {
            b.getBitmap().recycle();
        }
        super.onDestroy();
    }
}
</span></span>



效果:


源代码:http://download.csdn.net/detail/csdnhejingzhou/9348707


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要截取扩展屏的像,可以使用DXGI(DirectX Graphics Infrastructure,即DirectX图形基础结构)来实现。DXGI是一个用于管理计算机的图形设备接口的组件,它提供了一组用于处理图形资源的函数和接口。 要使用DXGI截取扩展屏的像,可以按照以下步骤进行: 1. 初始化DXGI:首先,需要初始化DXGI来获取图形适配器和输出设备。可以使用DXGI的CreateDXGIFactory函数来创建一个DXGI工厂对象,然后使用工厂对象的EnumAdapters函数来获取所有的图形适配器。 2. 获取输出设备:在获取到图形适配器后,可以使用图形适配器的EnumOutputs函数来获取关联的输出设备。输出设备可以是显示器、投影仪等外部显示设备。 3. 获得输出设备的资源:获取到输出设备后,可以使用输出设备的GetDesc函数来获取输出设备的详细信息,如分辨率、刷新率等。然后,使用输出设备的GetDisplaySurfaceData函数来获取输出设备的内存表面数据。 4. 保存截图:将获取到的内存表面数据保存为像文件。可以使用像处理库来将内存表面数据转换为常见的像格式,如BMP、JPEG等。 值得注意的是,DXGI截取扩展屏的像需要在需要截取的扩展屏上有一个窗口或应用程序在运行。这是因为DXGI是基于窗口的,只有通过窗口或应用程序才能获取到扩展屏的像数据。 总结而言,使用DXGI截取扩展屏的像需要初始化DXGI、获取输出设备的资源,并将获取到的像数据保存为像文件。 ### 回答2: 使用dxgi进行截图时,要截取扩展屏的像,可以按照以下步骤进行操作。 首先,我们需要使用dxgi来获取当前系统中的像适配器(Adapter)列表。像适配器包含了连接到计算机上的所有显示设备的信息。 然后,我们需要遍历适配器列表,找到我们想要截取屏幕的扩展屏所对应的适配器。可以通过适配器的属性来判断哪个适配器对应的是扩展屏。 接下来,我们需要获取选定适配器的显示输出(Output)列表。显示输出是连接到适配器上的物理显示设备,每个适配器可能有多个显示输出。 然后,我们需要遍历显示输出列表,找到我们想要截取屏幕的扩展屏所对应的显示输出。可以通过显示输出的属性来判断哪个显示输出对应的是扩展屏。 最后,我们可以使用dxgi来捕捉扩展屏的像数据。可以使用dxgi的函数来获取扩展屏的资源(Resource),并将资源的内容复制到内存中的缓冲区。 通过以上步骤,我们就可以使用dxgi成功截取扩展屏的像。需要注意的是,dxgi是一个底层的图形界面API,需要了解其相关接口和函数的使用方法,才能实现扩展屏的截取。 ### 回答3: 要截取扩展屏像,需要使用DXGI(DirectX Graphics Infrastructure)来实现。DXGI是一套用于处理图形和显存的API,可以用来管理多个显示器和图形设备。 首先,我们需要使用DXGI来获取所有连接的显示器信息。通过调用函数EnumDisplayDevices和EnumDisplaySettings,可以获得系统中所有显示器的属性和设置。 接下来,使用DXGI创建一个Direct3D设备,并指定需要截取像的扩展屏。可以使用CreateDevice函数来创建设备,并指定目标显示器的索引号。 然后,使用DXGI创建一个纹理来存储扩展屏的像数据。通过调用CreateTexture2D函数,可以创建一个纹理对象,并指定纹理的宽度、高度、像素格式等属性。 接下来,创建一个后备缓冲区,并将扩展屏的像数据拷贝到后备缓冲区。使用函数Map和CopyResource,可以将纹理对象映射到一个CPU可访问的内存区域,并将像数据拷贝到后备缓冲区中。 最后,将后备缓冲区中的像数据保存到文件。可以使用DXGI提供的保存像数据的函数,例如SaveSurfaceToFile,将像保存为常见的像格式(如PNG或JPEG)。 总结起来,使用DXGI截取扩展屏像的步骤是:获取显示器信息、创建设备、创建纹理、拷贝像数据到后备缓冲区、保存像数据到文件。通过这些步骤,就可以实现扩展屏像的截取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值