精华内容
下载资源
问答
  • 这是一上完全通过Duilib来实现的一个图片查看器,仿照QQ图片查看器的效果实现,希望大家喜欢。 先看一下使用的截图吧: 一:使用说明 1. 通过命令行调用,传递图片路径即可打开图片查看器,支持绝对路径与相对...

    这是一个完全通过Duilib来实现的一个图片查看器,仿照QQ图片查看器的效果实现,希望大家喜欢。

    先看一下使用的截图吧:

     

    做相关说明如下:


    一:使用说明
    1. 通过命令行调用,传递图片路径即可打开图片查看器,支持绝对路径与相对路径,如:ImageViewer.exe c:\test.png
    2. 在窗口上双击可关闭程序

    二:功能说明
    1. 支持jpg、png、bmp、gif等4种格式图片
    2. 支持图片拖动偏移后的平滑放大缩小;通过鼠标放大或窗口大小变化时,支持图片平滑适配
    3. 支持非gif图片的翻转
    4. 支持保存图片到本地
    5. 支持按图片自动控制窗口的大小显示[打开进程时]
    6. 支持通过上一张与下一张控制显示图片所在目录下的其他图片[按修改先后时间排序],并显示当前正在浏览哪一张

    三:原理说明
    额,好像也没啥好说的,大致就是利用duilib的现有特性功能来实现,比如在放大时,计算出图片的放大后的尺寸以及窗口的大小,进一步计算出存放图片的容器的POS信息,设置就好。


    我认为这里需要注意的是图片在放大以后,通过鼠标拖动了图片,再放大时,要能保持在现有的中心处放大,而不是以原始图片的中心来放大或缩小;这样可以保证被拖放后的图片在二次放大或缩小时,整个是一个平滑的过程,也没啥技术含量,就是一些坐标的计算了。


    这种工具技术性不强,就是一些细节调试需要花费比较多的时间,以上全部应用duilib的功能实现,没有自己写一行绘图的代码,有几点提一下:
    1. 通过SetMouseEnabled来控制放大比例显示的层不响应鼠标事件,这样可以穿透在图片上的层,不至于会影响到放大后图片的位置拖放
    2. 通过调整float控件的pos实现,支持负值的pos信息,通过设置pos信息来实现图片的拖动 
    3. 图片会被缓存,需要在翻转及切换图片时,先清理一下相应图片的缓存[paintmanager.RemoveImage(path)],防止切换后图片不更新或更新错
    4. 至于其他窗口半透明啥的,咱们就不在这里讨论了,网上信息很多了   ^_^
    5. 其他... 

    有任何问题,欢迎大家跟帖讨论,也可以加我QQ反馈:182534287
    欢迎访问乖乖牛在线:
    http://www.ggniu.cn

    示例程序下载:http://download.csdn.net/detail/tragicguy/8965903

    展开全文
  • Android最简单的图片点击放大查看器

    万次阅读 2016-08-09 17:41:27
    废话不说直接正文,很多APP开发中的图片查看器,很臃肿,不适合简单,轻量,快速的开发, 该方法,为图片点击放大查看做了一些操作。 1.需要东西, (1),需要放大的图片,即Imageview控件, (2),用来显示放大后...

    废话不说直接正文,很多APP开发中的图片查看器,很臃肿,不适合简单,轻量,快速的开发,

    该方法,为图片点击放大查看做了一些操作。

    1.需要东西,

    (1),需要放大的图片,即Imageview控件,

    (2),用来显示放大后的图片的dialog,自定义弹出框MyImageDialog,

    (3),即自定义弹出框的布局imagedialogview.xml。既可以完成方便移植,介入的图片查看器


    MyImageDialog.java的代码如下:

    package com.shootbox.CustomControl.MyDiaLog;
    
    import android.app.Dialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.Window;
    import android.view.WindowManager;
    import android.view.animation.AnimationUtils;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import com.shootbox.R;
    
    /**
     * Funcation : ---
     * Creater : 王哲
     * Created by shootbox on 2016/3/26.
     */
    public class MyImageDialog extends Dialog{
    
        private Window window = null;
        private ImageView iv;
        private Bitmap bms;
        public MyImageDialog(Context context, boolean cancelable,
                        DialogInterface.OnCancelListener cancelListener) {
            super(context, cancelable, cancelListener);
        }
        public MyImageDialog(Context context, int cancelable,int x,int y,Bitmap bm) {
            super(context, cancelable);
            windowDeploy(x, y);
            bms = bm;
    
        }
        public MyImageDialog(Context context) {
            super(context);
        }
    
        protected void onCreate(Bundle savedInstanceState) {
            //初始化布局
            View loadingview= LayoutInflater.from(getContext()).inflate(R.layout.imagedialogview,null);
            iv=(ImageView) loadingview.findViewById(R.id.imageview_head_big);
            iv.setImageBitmap(bms);
            //设置dialog的布局
            setContentView(loadingview);
    		//如果需要放大或者缩小时的动画,可以直接在此出对loadingview或iv操作,在下面SHOW或者dismiss中操作
            super.onCreate(savedInstanceState);
        }
    
        //设置窗口显示
        public void windowDeploy(int x, int y){
            window = getWindow(); //得到对话框
            window.setWindowAnimations(R.style.dialogWindowAnim); //设置窗口弹出动画
            window.setBackgroundDrawableResource(R.color.vifrification); //设置对话框背景为透明
            WindowManager.LayoutParams wl = window.getAttributes();
            //根据x,y坐标设置窗口需要显示的位置
            wl.x = x; //x小于0左移,大于0右移
            wl.y = y; //y小于0上移,大于0下移
    //            wl.alpha = 0.6f; //设置透明度
    //            wl.gravity = Gravity.BOTTOM; //设置重力
            window.setAttributes(wl);
        }
    
        public void show() {
            //设置触摸对话框意外的地方取消对话框
            setCanceledOnTouchOutside(true);
            super.show();
        }
        public void dismiss() {
            super.dismiss();
        }
    }
    
    下面是改自定义空间的布局文件imagedialogview。xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ImageView
            android:id="@+id/imageview_head_big"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:src="@drawable/activity_personal_head_logo"
            android:layout_gravity="center"
            android:scaleType="fitXY"
            />
    
    </LinearLayout><!-- From: file:/D:/ShootBox/app/src/main/res/layout/imagedialogview.xml -->

    然后是最为关键的两三行代码,即引用该自定义dialog

    是该头像的点击事件处理,此处多变可以设置单击或者长按

    	//头像
    		if (view == imageAvator){
    
    //			startActivity(new Intent(this.getActivity(), ActivityUserImageShower.class));
    
    			imageAvator.setDrawingCacheEnabled(true);
    			MyImageDialog myImageDialog = new MyImageDialog(getActivity(),R.style.dialogWindowAnim,0,-300,imageAvator.getDrawingCache());
    			myImageDialog.show();
    
    			/** 常用方法 */
    			//animation.setRepeatCount(int repeatCount);//设置重复次数
    			//animation.setFillAfter(boolean);//动画执行完后是否停留在执行完的状态
    			//animation.setStartOffset(long startOffset);//执行前的等待时间
    //			imageAvator.setAnimation(animation);
    //			animation.startNow();
    //
    //			Log.e("Tag", "---end--");
    					//
    		}

    即也可以在任何出调用,且上述方法中的

    imageAvator.setDrawingCacheEnabled(true);不可以忘记写,

    不然imageAvator.getDrawingCache()会拿不到你要放大的图片,,

    ----------------------------------------------------该文至此结束---------------------------------------------


    展开全文
  • 我们首先要导入资源文件,主要是图片资源,用来做图片查看器的背景,主要是美化作用,图片按你自己意愿选择,如下: 界面文件imagedialog.ui如下: 我们可以看到街面上有四个按钮,一个显示区显示图片,同时...

    源码地址:https://gitee.com/dxl96/qt_resource/blob/master/picture.rar

    最终效果:

    这次设计我们结合qt的界面文件进行设计,不只是用纯代码来编写,这样对于初学者来说更直观。

    我们首先要导入资源文件,主要是图片资源,用来做图片查看器的背景,主要是美化作用,图片按你自己意愿选择,如下:

    界面文件mainwindow.ui如下:

    我们可以看到街面上有四个按钮,一个显示区显示图片,同时还有一个绿色的区域。

    我这里就讲一下这四个到底是什么,绿色的区域,其实是scrollArea类型的组件,我们可以在这里找到

    选择后拖进进MainWindow即可,然后调整大小即可,这个组件的作用是可以在图片太大的时候可以进行拖放

    在添加Lable组件,这就是那个浅灰色区域,可以显示图片、文字等,在这里可以找到

    然后将Lable组件拖进scrollArea区域中,将鼠标定位在scrollArea上,选择栅格布局,这样浅灰色区域就填充满了scrollArea,开始Lable是无背景的,我们单击右键

    选择改变样式表,进入后我们

    按图选择颜色即可

    四个按钮是Push Button组件,在这里可以找到,拖进去四个即可,

    然后分别把它们的对象名称分别改一下,就是下面这样

    改成相应的意思,有上一页,下一页,打开文件,退出

    在改变每个按钮的文本双击按钮即可,输入与对象名称对应的中文意思即可

    然后我们改变整个的背景,同样的我们将鼠标定位在MainWindow上选择改变样式,写成如下形式

    其实就是我们在选择添加资源下选择background-image

    然后在外部添加一个QMainWindow

    这样背景就弄好了

    接着我们框住四个按钮选择水平布局

    然后将鼠标定位到MainWindow上,选择垂直布局,就完成了所有的界面布局

    然后单击右键每个按钮,选择转到槽中选择

    即可

    在mainwindow.h头文件中代码如下:

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    #include <QString>
    #include <QFileInfoList>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private slots:
        /**
         * @brief on_previousPushButton_clicked 上一张
         */
        void on_previousPushButton_clicked();
    
        /**
         * @brief on_nextPushButton_clicked 下一张
         */
        void on_nextPushButton_clicked();
    
        /**
         * @brief on_openPushButton_clicked 打开文件
         */
        void on_openPushButton_clicked();
    
        /**
         * @brief on_close_clicked 退出
         */
        void on_close_clicked();
    private:
        Ui::MainWindow *ui;
        // 当前打开文件路径
        QString filePath;
        // 已添加的记录
        QFileInfoList imgInfoList;
        // 当前打开文件在imgInfoList集合中的索引值
        int index;
        /**
         * @brief appendImageFileInfoList 向imgInfoList集合追加图片集合
         * @param infoList 需要追加的图片集合
         * @param fileinfoL 集合中要排除的图片
         */
        void appendImageFileInfoList(QFileInfoList infoList,QFileInfo fileinfoL);
        /**
         * @brief isConstant imgInfoList集合中是否包含某个文件
         * @param fileinfo 需要判断的文件
         * @return 是否包含,bool值
         */
        bool isConstant(QFileInfo fileinfo);
        /**
         * @brief getIndexForImgInfoList 获取图片在imgInfoList集合中的索引
         * @param fileinfo 需要获取的文件
         * @return 该文件索引值
         */
        int getIndexForImgInfoList(QFileInfo fileinfo);
    };
    
    #endif // MAINWINDOW_H
    

    其实这个头文件中我们是定义了简单的几个变量和方法

    QString filePath;
    QFileInfoList imgInfoList;
    int index;
    
    void appendImageFileInfoList(QFileInfoList infoList,QFileInfo fileinfoL);
    bool isConstant(QFileInfo fileinfo);
    int getIndexForImgInfoList(QFileInfo fileinfo);

    我们将鼠标定位在四个槽函数void前面的位置

    void on_previousPushButton_clicked();
    void on_nextPushButton_clicked();
    void on_openPushButton_clicked();
    void on_close_clicked();

    分别按住alt+enter,选择在mainwindow.cpp中生成槽函数即可(已经生成不用再生成)

    在mainwindow.cpp中代码如下:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QtWidgets>
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        setWindowTitle("图片查看器");
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    /**
     * @brief MainWindow::on_previousPushButton_clicked 上一张
     */
    void MainWindow::on_previousPushButton_clicked()
    {
        index = index - 1;
        int count = imgInfoList.count();
        qDebug() << "总记录图片数count: " << count << "当前index: " << index;
        if (count==0)
        {
            // 当不存在图片时,提示错误
            // 恢复到初始索引
            index = index + 1;
            qDebug() << "总记录图片数count: " << count << "恢复index: " << index;
            QMessageBox::information(this, tr("出错"), tr("打开失败,没有图片记录"));
            return;
        }
        if (index < 0) {
            // 如果索引小于0,则跳回设置为最后一张(就是从开头回到最后)
            index = count - 1;
            qDebug() << "总记录图片数count: " << count << "跳转到末尾index: " << index;
        }
    
        filePath.clear();
        filePath += imgInfoList.at(index).absoluteFilePath();
        qDebug() << "文件名: " << filePath;
    
        QImage image;
        if (!image.load(filePath)) {
            QMessageBox::information(this, tr("出错"), tr("打开失败,不支持的格式或文件异常"));
            return ;
        }
    
    
        QPixmap pixmap = QPixmap::fromImage(image);
        ui->imageLabel->setPixmap(pixmap);
        ui->imageLabel->resize(pixmap.size());
    
        setWindowTitle(QFileInfo(filePath).fileName());
    }
    
    /**
     * @brief MainWindow::on_nextPushButton_clicked 下一张
     */
    void MainWindow::on_nextPushButton_clicked()
    {
        index = index + 1;
        int count = imgInfoList.count();
        qDebug() << "总记录图片数count: " << count << "当前index: " << index;
        if (count==0)
        {
            // 当不存在图片时,提示错误
            // 回退索引值
            index = index -1;
            qDebug() << "总记录图片数count: " << count << "恢复index: " << index;
            QMessageBox::information(this, tr("出错"), tr("打开失败,没有图片记录"));
            return;
        }
        if (index >= count)
        {
            // 如果索引到达末尾,则跳回设置为第一张(就是从最后回到开头)
            index = 0;
            qDebug() << "总记录图片数count: " << count << "跳转到开头index: " << index;
        }
    
        filePath.clear();
        filePath += imgInfoList.at(index).absoluteFilePath();
        qDebug() << "文件名: " << filePath;
    
        QImage image;
        if (!image.load(filePath)) {
            QMessageBox::information(this, tr("出错"), tr("打开失败,不支持的格式或文件异常"));
            return ;
        }
    
        QPixmap pixmap = QPixmap::fromImage(image);
        ui->imageLabel->setPixmap(pixmap);
        ui->imageLabel->resize(pixmap.size());
        setWindowTitle(QFileInfo(filePath).fileName());
    }
    
    /**
     * @brief MainWindow::appendImageFileInfoList 向imgInfoList集合追加图片集合
     * @param infoList 需要追加的图片集合
     * @param fileinfoL 集合中要排除的图片
     */
    void MainWindow::appendImageFileInfoList(QFileInfoList infoList,QFileInfo fileInfo) {
        QFileInfo info;
        for (int i = 0; i < infoList.count(); i++) {
            info = infoList.at(i);
            qDebug() << "同级路录下" << i << ":" <<info.absoluteFilePath();
            QString suffix = info.suffix();
            if ((suffix == "jpg" || suffix == "bmp" || suffix == "png" || suffix == "gif")
                    && fileInfo.absoluteFilePath() != info.absoluteFilePath()) {
                imgInfoList.append(info);
                qDebug() << "追加图片:" << info.absoluteFilePath();
            }
        }
    }
    
    /**
     * @brief MainWindow::isConstant imgInfoList集合中是否包含某个文件
     * @param fileinfo 需要判断的文件
     * @return 是否包含,bool值
     */
    bool MainWindow::isConstant(QFileInfo fileinfo) {
        QFileInfo info;
        for (int i = 0; i < imgInfoList.count(); i++) {
            info = imgInfoList.at(i);
            if(fileinfo.absoluteFilePath() == info.absoluteFilePath()) {
                qDebug() << "图片记录中包含:" << fileinfo.absoluteFilePath();
                return true;
            }
        }
        qDebug() << "图片记录中不包含:" << fileinfo.absoluteFilePath();
        return false;
    }
    
    /**
     * @brief MainWindow::getIndexForImgInfoList 获取图片在imgInfoList集合中的索引
     * @param fileinfo 需要获取的文件
     * @return 该文件索引值
     */
    int MainWindow::getIndexForImgInfoList(QFileInfo fileinfo) {
        QFileInfo info;
        for (int i = 0; i < imgInfoList.count(); i++) {
            info = imgInfoList.at(i);
            if(fileinfo.absoluteFilePath() == info.absoluteFilePath()) {
                qDebug() << "图片记录索引值:" << i << " | " << fileinfo.absoluteFilePath();
                return i;
            }
        }
        qDebug() << "没有获取到索引值:" << fileinfo.absoluteFilePath();
        return -1;
    }
    
    /**
     * @brief MainWindow::on_openPushButton_clicked 打开文件
     */
    void MainWindow::on_openPushButton_clicked()
    {
        filePath = QFileDialog::getOpenFileName(this, tr("选择图片:"),
                                                ".", tr("Images (*.png *.bmp *.jpg *.gif)"));
        if (filePath.isEmpty()) {
            QMessageBox::information(this, tr("错误"), tr("获取文件失败"));
            return ;
        }
    
        QImage image;
        if (!image.load(filePath)) {
            QMessageBox::information(this, tr("错误"), tr("打开图片失败"));
            return ;
        }
    
        QPixmap pixmap = QPixmap::fromImage(image);
        QSize imageSize = pixmap.size();
        ui->imageLabel->setPixmap(pixmap);
        ui->imageLabel->resize(imageSize);
        qDebug() << "文件名: " << filePath;
        QFileInfo currentFileInfo = QFileInfo(filePath);
        setWindowTitle(currentFileInfo.fileName());
    
        QDir dir = currentFileInfo.absoluteDir();
        QFileInfoList infoList = dir.entryInfoList(QDir::Files);
        qDebug() << "获取文件同级目录图片数:" << infoList.count() << dir;
        if(!isConstant(currentFileInfo)) {
            imgInfoList.append(currentFileInfo);
            qDebug() << "追加图片:" << currentFileInfo.absoluteFilePath();
            appendImageFileInfoList(infoList, currentFileInfo);
        }
        index = getIndexForImgInfoList(currentFileInfo);
    }
    
    /**
     * @brief on_close_clicked 退出
     */
    void MainWindow::on_close_clicked()
    {
        imgInfoList.clear();
        ui->imageLabel->clear();
        setWindowTitle("图片查看器");
        close();
    }
    
    
    
    
    
    展开全文
  • 网络图片查看器 清单文加入网络访问权限: | |   界面如下: 示例: public class MainActivity extends Activity { private EditText imagepath; private

    网络图片查看器

    清单文加入网络访问权限:

    	 |<!-- 访问internet权限 -->
    | <uses-permission android:name="android.permission.INTERNET"/>

     

    界面如下:


    示例:

    public class MainActivity extends Activity {
        private EditText imagepath;
        private ImageView imageView;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            
            imagepath = (EditText) this.findViewById(R.id.imagepath);
            imageView = (ImageView) this.findViewById(R.id.imageView);
            
            Button button = (Button) this.findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {			
    			public void onClick(View v) {
    				String path = imagepath.getText().toString();
    				try{
    					byte[] data = ImageService.getImage(path);//获取图片数据
    					if(data!=null){
    						//构建位图对象
    						Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
    						imageView.setImageBitmap(bitmap);//显示图片
    					}else{
    						Toast.makeText(getApplicationContext(), R.string.error, 1).show();
    					}					
    				}catch (Exception e) {
    					Toast.makeText(getApplicationContext(), R.string.error, 1).show();
    				}
    			}
    		});
        }
    }
    public class ImageService {
    	/**
    	 * 获取图片
    	 * @param path 网络图片路径
    	 * @return 图片的字节数据
    	 */
    	public static byte[] getImage(String path) throws Exception{
    		URL url = new URL(path);
    		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    		//设置超时时间
    		conn.setConnectTimeout(5000);
    		conn.setRequestMethod("GET");
    		if(conn.getResponseCode()==200){
    			InputStream inStream = conn.getInputStream();
    			byte[] data = StreamTool.read(inStream);
    			return data;
    		}
    		return null;
    	}
    }
    public class StreamTool {
    	/**
    	 * 读取输入流数据
    	 * @param inStream
    	 * @return
    	 */
    	public static byte[] read(InputStream inStream) throws Exception{
    		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    		byte[] buffer = new byte[1024];
    		int len = 0;
    		while( (len = inStream.read(buffer)) != -1 ){
    			outStream.write(buffer, 0, len);
    		}
    		inStream.close();
    		return outStream.toByteArray();
    	}
    }


    网页源码查看器


    如果网页的源码超过屏幕的显示位置的话,要求出现滚动条.

        <ScrollView
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
        >
    	     <TextView  
    	    android:layout_width="fill_parent" 
    	    android:layout_height="wrap_content" 
    	    android:id="@+id/htmlsource"
    	    />
        </ScrollView>

    界面如下:

    示例

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            pathText = (EditText) this.findViewById(R.id.path);
            htmlsource = (TextView) this.findViewById(R.id.htmlsource);
            
            Button button = (Button) this.findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
    			
    			public void onClick(View v) {
    				String path = pathText.getText().toString();
    				try{
    					//获取源码
    					String html = PageService.getHtml(path);
    					htmlsource.setText(html);
    				}catch (Exception e) {
    					Toast.makeText(getApplicationContext(), R.string.error, 1).show();
    				}
    			}
    		});
        }

    public class PageService {
    	/**
    	 * 获取网页源代码
    	 * @param path 网页路径
    	 * @return
    	 */
    	public static String getHtml(String path) throws Exception{
    		URL url = new URL(path);
    		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    		conn.setConnectTimeout(5000);
    		conn.setRequestMethod("GET");
    		if(conn.getResponseCode() == 200){
    			byte[] data = StreamTool.read(conn.getInputStream());
    			return new String(data, "UTF-8");
    		}
    		return null;
    	}
    }


    展开全文
  • Android图片查看器

    千次阅读 2010-05-15 12:27:00
     + "点击鼠标可以移动图片位置到指定位置")  .setPositiveButton("确定",  new DialogInterface.OnClickListener()  {  @Override  public void onClick(DialogInterface dialog,  int which) ...
  • 现在越来越多的APP都会有图片展示,这里是模仿微信的朋友圈图片...2.计算gridView下iamgeView Item所在位置 3.一张图大小 4.图片展示动画 1.透明Activity (1)设置透明Activity的theme @android:color/transparent
  • 要实现图片在手指点击滑动后
  • 刚学到JavaSwing图片绘制,于是自己做了个简易的图片查看器小程序,在这里分享给大家,请多多指教。 话不多说先上部分图: 绘制图片需要自定义一个控件,我们这里写一个继承自JPanel的类,重写paintComponent...
  • 新装的WIN10 LTSC 2019,发现默认看图则是画图,并不是照片查看器。 对WIN10 不太了解,不知道现在WIN10正确的看图方式还是不是照片查看器,但不管怎么样,照片查看器用的习惯了,所以想用回照片查看器,以下是操作...
  • 前言因为一些特殊的业务需求,经过一个多月的蛰伏及思考,我开发了这款 jQuery 图片查看器插件 Magnify,它实现了 Windows 照片查看器的所有功能,比如模态窗的拖拽、调整大小、最大化,图片的缩放、平移、旋转,...
  • Window图片和传真查看器不能用

    千次阅读 2009-10-05 21:12:00
    在使用Window图片和传真查看器看图时,点击图片的时候无效,没有反应,图片缩略图没有显示。 怎么办?? 方法: 1、到X:/windows/system32下面找一下还有没有shimgvw.dll这个文件; 2、如果有,跳到下一步;如果没有...
  • Android 大图查看器

    千次阅读 2016-02-25 23:36:39
    在项目里自己写了个大图查看效果,感觉还行,打包成了库,分享给大家,先看效果图: 源码地址:https://github.com/mabeijianxi/LookBigPicUtils 使用方法: Usage Step-1 导入并且添加依赖: Gradle: ...
  • 今天看了今日头条APP的图片查看的效果,就自己实现了一下。效果如下首先引入两个库一个是图片缩放的功能:PhotoView框架compile 'com.github.chrisbanes:PhotoView:1.2.6'一个界面滑动退出效果(比如自己滑动空白...
  • 如果不是因为系统自带的图片查看器没有你想要的功能,或者你想要更棒的体验,你大概不会想切换到其它图片查看器吧。-- Ankush Das致谢译自 | itsfoss.com...
  • 这个比较简单了,因为我实现朋友圈查看器是使用UICollectionView实现的,所以说每个cell的大小都是整个屏幕,所以说当前显示的图片的cell的下标即为图片的下标 - ( NSInteger )indexForDismissView{ //获取...
  • Intent intent = new Intent(Intent.ACTION_VIEW);...filePath = "这里是图片文件路径"; Uri uri; if (Build.VERSION.SDK_INT >= 24) { File file = new File(filePath); Log.i("mine",file.length()+""); uri = F
  • 前言:每次看到微信和朋友圈的时候点击图片放大效果动画感觉还不错,还可以根据图片定位获取图片,动画展开,这个开始让我思索。其实没有想象中的那个难 ,就是获取图片的定位相对来说难一点而已。
  • 从零封装一个Android大图查看器

    万次阅读 2017-05-11 09:30:13
    大图查看器是许多app的常用功能,主要使用场景是用户点击图片,然后启动一个新界面来展示图片的完整尺寸,并能通过手势移动图片以及放大缩小。当然,上面说的是最基本的功能,实际使用中还要包括:如果是本地图片...
  • 根据选择的本地图片的exif信息,读取到地理位置的经纬度,然后使用高德地图反地理编码解析出地理位置名称,如果图片中没有包含或者无法包含经纬度信息,那么就在用户发起拍照请求时通过高德定位SDK拿到相关信息。...
  • 不用怕,看了这篇博客,让你从此不用再担心,小广告的骚扰,好了不扯了,以下是我的总结,都挺有用的:1:alt+ctrl+delete打开任务管理找不熟悉的进程,右键找到文件位置 2:删肯定是删不掉的,恶意插件会一直在你...
  • 事实上,微信所做的并没有这么复杂,有业内人士告诉新功能是基于图片位置信息(即Exif的GPS定位信息)实现的。 什么是Exif? Exif(Exchangeable Image File)是一种图像文件格式,它最早是由日
  • 1、程序界面很简单,一个按钮和一个ImageView组件,当用户按下按钮时,程序会自动搜寻/assets/目录下的一张图片。2.在android studio中新建的工程并不存在assets目录,需要自己创建,在main目录下,创建assets目录,...
  • python 实现基本的图像查看器 -pillow

    千次阅读 2020-03-15 21:40:51
    上一个博客 实现的拆分gif,最后的图查看不是按照文件名的顺序 排列查看的,这个时候我们就要自己手动来生成一个图片查看器,通过图片的名称顺序 来进行查看图片。 制作以上 文件夹中的图片查看器 模块介绍 ...
  • Python解析照片EXIF信息,获取坐标位置

    千次阅读 多人点赞 2019-12-10 09:26:38
    目录 1、背景 2、云端部署 3、照片分析 1、背景 每张图片都包含EXIF信息,它是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄...网上有很多的EXIF信息查看器,这里...
  • Viewer.js 是一款强大的图片查看器,像门户网站一般都会有各自的图片查看器,如果您正需要一款强大的图片查看器,也许 Viewer.js 是一个很好的选择。 Viewer.js下载:点击下载 Viewer.js 有以下特点: 支持移动...
  • Android 超高仿微信图片选择 图片该这么加载

    万次阅读 多人点赞 2014-10-14 09:25:45
    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:【张鸿洋的博客】1、概述关于手机图片加载,在当今像素随随便便破千万的时代,一张图片占据的内存都相当可观,作为高大...
  • 实质上,本文的中心还是在讨论C#对SQL Server的增删改查,只是这次创新一点,配合Treeview制作SQL Server数据库查看器。 具体如下图: 根据SQL Server,Test数据库中的表的结构与内容: 编写一个对Test数据库...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 140,433
精华内容 56,173
关键字:

图片位置信息查看器