Red de conocimiento del abogados - Ley de patentes - Cómo utilizar el portapapeles plus

Cómo utilizar el portapapeles plus

Matlab proporciona una función llamada portapapeles para configurar o leer texto en el portapapeles. Esta función tiene una limitación muy seria, es decir, solo puede operar en texto. Aunque el parámetro Pastespecial se utiliza para convertir la tabla de texto en una matriz de Matlab a través de la herramienta de importación de datos, en cualquier caso, el texto en el portapapeles se opera y no puede ser otro tipo de datos. Esta vez agregamos una extensión al portapapeles para permitirle leer objetos de imagen en el portapapeles. Por supuesto, esta función se implementa a través de Java, por lo que si desea utilizarla, Matlab debe tener soporte para la máquina virtual Java.

El código completo de clipboardex.m es el siguiente: function dat = clipboardex(varargin)% 2013.06.26 PM 09:26% Matlab 2013a% xialuleeif strcmp(varargin{1}, 'copiar') portapapeles(varargin{:}); return;else dat = portapapeles(varargin{:});endif ~strcmp(dat, '') return;endimport java.awt.*clipb = Toolkit.getDefaultToolkit().getSystemClipboard();df = clipb.getAvailableDataFlavors(); tipo_datos = 'no estoy seguro'; para idx = 1: numel(df) if isequal(df(idx), transferencia de datos.DataFlavor.imageFlavor) tipo_datos = 'imagen'; endendswitch tipo_datos caso 'imagen' dat = clipb.getContents( []) .getTransferData(datatransfer.DataFlavor.imageFlavor); grabber = image.PixelGrabber(dat, 0, 0, -1, -1, false); grabber.grabPixels(); isa(píxeles, 'int8'); píxeles = encasillado(píxeles, 'uint8'); si es píxeles grises = remodelar(píxeles, dat.getWidth(), dat.getHeight()).'; 4, dat .getWidth(), dat.getHeight()); píxeles = permute(píxeles, 3:-1:1); píxeles = píxeles(:, :, 3:-1:1); de lo contrario error( 'Tipo de datos no admitido');endend En el código anterior, el código utilizado para obtener los datos del portapapeles tiene solo dos líneas, clipb = Toolkit.getDefaultToolkit().getSystemClipboard();dat = clipb.getContents([] ).getTransferData( datatransfer.DataFlavor.imageFlavor); Si el contenido del portapapeles es una imagen, el tipo de dat es java.awt.image.BufferedImage. El código siguiente utiliza PixelGrabber para extraer los datos de píxeles en dat y construirlos en una matriz de imagen de Matlab.

La razón por la que parece un poco complicado es que Java usa Row-Major, mientras que Matlab usa Column-Major. Si la imagen es una imagen en escala de grises, es fácil decir que los datos se pueden reorganizar mediante transposición matricial. Sin embargo, las imágenes que contienen componentes RGB, debido a que corresponden a matrices tridimensionales, deben utilizar "transposición generalizada", como permutar. ordenar los datos. Estos contenidos se mencionaron en el anterior "xialulee vs. pythonchallenge-level11 (continuación)". Cómo utilizar. Primero debería haber una imagen en el portapapeles. Por ejemplo, copie una imagen de Firefox y ejecútela en Matlab como se muestra a continuación >> img = clipboardex('paste'). En este momento, la variable img es la imagen en el portapapeles, use imshow para ver >> imshow(img); )