1

画像のサイズを変更して保存しようとしていますが、保存している画像のサイズが変更されていません。

これが私が使おうとしているコードです。

if(CC_Files.fileExists(path)){
                if(path.contains(".jpg") || path.contains(".png") || path.contains(".gif") ){
                Image image = (Image) SWTResourceManager
                        .getImage(path);
                ImageData imgData = image.getImageData();
                imgData.scaledTo(150, 150);
                ImageLoader imageLoader = new ImageLoader();
                imageLoader.data = new ImageData[] {imgData};
                imageLoader.save(Variables.getStrResources() + "\\Pics\\" + a.getHerd_id() + ".jpg",SWT.IMAGE_JPEG);
    }      
}
4

3 に答える 3

2

あなたの問題は、書かれているJavaDocを読まないことです

ImageData#scaledTo(int width, int height) - Returns a copy of the receiver which has been stretched or shrunk to the specified size.

したがって、解決策は次のとおりです。

imgData = imgData.scaledTo(150, 150);

ドキュメンテーション

于 2012-12-19T21:12:17.180 に答える
1

JavaSWTイメージのサイズ変更は適切に機能します

ImageLoaderクラスは、ファイルまたはストリームから画像をロードしたり、ファイルまたはストリームに画像を保存したりするために使用されます

imageLoader.save(result, SWT.IMAGE_COPY)

FileDialogクラスを使用すると、ユーザーはファイルシステムをナビゲートし、ファイル名を選択または入力できます。

Button btnOpen = new Button(parent, SWT.NONE);
btnOpen.setBounds(200, 55, 68, 23);
btnOpen.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {

          FileDialog dialog = new FileDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.OPEN);
          String result = dialog.open();

           if(result!=null)
           {
               Image image=SWTResourceManager.getImage(result);
               //ImageData class are device-independent descriptions of images
               ImageData imgData = image.getImageData();
               imgData=imgData.scaledTo(200, 200);

               ImageLoader imageLoader = new ImageLoader();
               imageLoader.data = new ImageData[] {imgData};
               imageLoader.save(result, SWT.IMAGE_COPY);

               System.out.println("Width: "+imgData.width+".....Height: "+imgData.height);
               lbl_image_text.setBounds(25,88,imgData.width+10,imgData.height+10);
               lbl_image_text.setImage(SWTResourceManager.getImage(result));
           }
    }
});
btnOpen.setText("open");
CLabel lbl_image_text = new CLabel(parent, SWT.Resize);

画像サイズを動的にラベル付けに設定

Button btnOpen = new Button(parent, SWT.NONE);
btnOpen.setBounds(200, 55, 68, 23);
btnOpen.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {

          FileDialog dialog = new FileDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.OPEN);
          String result = dialog.open();

           if(result!=null)
           {

               Image image=SWTResourceManager.getImage(result);
               //get Image width and height
               lbl_image_text.setBounds(25,88,image.getBounds().width+10,image.getBounds().height+10);
               lbl_image_text.setImage(SWTResourceManager.getImage(result));
           }
    }
});
btnOpen.setText("open");
CLabel lbl_image_text = new CLabel(parent, SWT.Resize);
于 2017-02-02T13:35:16.290 に答える
0

SWT.addListener(SWT.Close、new CustomShellCloseListener())からこのメソッドを呼び出します。渡す必要のあるパラメーターは、LabelImage(Label.getImage()を使用しない、直接パスを渡す)、label.getBounds.width、label.getBounds.heightです。

protected Image resize(Image imageFromSource, int width, int height) {
    if(width>0 && height>0){
        Image scaledImage = new Image(shellCCMPFMatrixBomCompare.getDisplay(), width, height);
        GC gc = new GC(scaledImage);            //Graphics Capabilities(GC instance) in SWT used to draw an Image, graphics, display
        gc.setAntialias(SWT.ON);        // Anti aliasing is used for making the low resolution image to redraw and make into a good resolution Image
        gc.setInterpolation(SWT.HIGH);      //Interpolation is based in the Graphics, it may not work properly in some systems
        gc.drawImage(imageFromSource, 0, 0, 
                imageFromSource.getBounds().width, imageFromSource.getBounds().height, 
                0, 0, width, height);       

        /*drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight)
        Copies a rectangular area from the source image into a (potentially different sized) rectangular area in the receiver.*/

        gc.dispose();
        return scaledImage;
        }
        else return imageFromSource;
}
于 2017-05-12T04:19:12.430 に答える