第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何將圖像數(shù)據(jù)復(fù)制到 BufferedImage 的子類中?

如何將圖像數(shù)據(jù)復(fù)制到 BufferedImage 的子類中?

精慕HU 2022-01-12 14:43:04
我有一個(gè)名為 Bitmap 的類,它從 BufferedImage 擴(kuò)展而來(lái),public class Bitmap extends BufferedImage {...它的一種方法稱為 copyImage,它將源圖像中的內(nèi)容復(fù)制到類中,它可以工作,但此方法不保持源圖像的原始縱橫比和尺寸。public void copyImage(Image image) {    if (image != null) {        BufferedImage bi = (BufferedImage) image;        Graphics g = getGraphics();        g.drawImage(bi, 0, 0, width, height, null);    }}我希望這個(gè)方法將源圖像復(fù)制到類中,并保持其原始縱橫比和尺寸保持不變,我想調(diào)整寬度和高度的大小我將上面的代碼修改為:public void copyImage(Image image) {    if (image != null) {        this.width = image.getWidth(null);        this.height = image.getWidth(null);        BufferedImage bi = (BufferedImage) image;        Graphics g = getGraphics();        g.drawImage(bi, 0, 0, width, height, null);    }}但它不起作用,我該如何修改上面的代碼來(lái)復(fù)制圖像?提前致謝。
查看完整描述

1 回答

?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

這是錯(cuò)誤的:


public void copyImage(Image image) {

    if (image != null) {

        this.width = image.getWidth(null);

        this.height = image.getWidth(null);


        BufferedImage bi = (BufferedImage) image;

        Graphics g = getGraphics();


        g.drawImage(bi, 0, 0, width, height, null);

    }

}

你的主要問(wèn)題是:

  1. 您似乎正在嘗試更改原始圖像的固有寬度和高度,this圖像,您不應(yīng)該這樣做,而不是這樣

  2. 您正在將參數(shù)圖像的寬度分配給this.height字段this.height = image.getWidth(null);

其他事宜:

  • 你沒(méi)有節(jié)省資源

  • 你正在制作危險(xiǎn)且不必要的演員表

它應(yīng)該是

public void copyImage(Image image) {

    if (image != null) {

        // don't change the width/height of your original image

        int width = image.getWidth(null);

        // int height = image.getWidth(null);

        int height = image.getHeight(null); // *** Note change ***


        // BufferedImage bi = (BufferedImage) image;  // *** no need ***

        Graphics g = getGraphics();


        g.drawImage(image, 0, 0, width, height, null);

        g.dispose();  // save resources

    }

}   

使用顯示概念證明的MCVE測(cè)試代碼:


import java.awt.Graphics;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.net.URL;


import javax.imageio.ImageIO;

import javax.swing.Icon;

import javax.swing.ImageIcon;

import javax.swing.JOptionPane;


public class TestImage {

    public static final String SOMME_PATH = "https://upload.wikimedia.org/"

            + "wikipedia/commons/thumb/f/fa/Cheshire_Regiment_trench_Somme_1916.jpg"

            + "/1024px-Cheshire_Regiment_trench_Somme_1916.jpg";

    public static final String BATTLE_PATH = "https://upload.wikimedia.org/wikipedia/"

            + "commons/1/13/K%C3%A4mpfe_auf_dem_Doberdo.JPG";


    public static void main(String[] args) {

        int imgW = 1000;

        int imgH = 700;

        MyImage myImage = new MyImage(imgW, imgH, BufferedImage.TYPE_INT_ARGB);

        BufferedImage sommeTrench = null;

        BufferedImage battleOfDoberdò = null;


        try {

            URL url = new URL(SOMME_PATH);

            sommeTrench = ImageIO.read(url);


            url = new URL(BATTLE_PATH);

            battleOfDoberdò = ImageIO.read(url);

        } catch (IOException e) {

            e.printStackTrace();

            System.exit(-1);

        }


        Icon icon = new ImageIcon(myImage);

        JOptionPane.showMessageDialog(null, icon, "Original MyImage", JOptionPane.PLAIN_MESSAGE);


        myImage.copyImage(sommeTrench);

        icon = new ImageIcon(myImage);

        JOptionPane.showMessageDialog(null, icon, "MyImage with Somme Trench", JOptionPane.PLAIN_MESSAGE);


        myImage.copyImage(battleOfDoberdò);        

        icon = new ImageIcon(myImage);

        JOptionPane.showMessageDialog(null, icon, "MyImage with Battle Of Doberdò", JOptionPane.PLAIN_MESSAGE);


    }

}

class MyImage extends BufferedImage {


    public MyImage(int width, int height, int imageType) {

        super(width, height, imageType);

    }


    public void copyImage(Image image) {

        if (image != null) {

            int width = image.getWidth(null);


            int height = image.getHeight(null); // *** Note change ***


            Graphics g = getGraphics();


            g.drawImage(image, 0, 0, width, height, null);

            g.dispose(); // save resources

        }

    }    

}

如果您運(yùn)行此代碼,您將看到 3 個(gè)圖像在 3 個(gè) JOptionPanes 中顯示為 ImageIcons,第一個(gè)是原始空白 MyImage 對(duì)象,然后在第一次世界大戰(zhàn)中的 2 個(gè)圖像被復(fù)制到原始圖像中。


查看完整回答
反對(duì) 回復(fù) 2022-01-12
  • 1 回答
  • 0 關(guān)注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)