cuốn sách gpt4 ai đã làm

java - 使用 Transparency.OPAQUE 的 createCompatibleImage 和使用 BufferedImage.TYPE_INT_ARGB 的简单 BufferedImage 构造函数有什么区别?

In lại Tác giả: Walker 123 更新时间:2023-11-29 05:26:09 26 4
mua khóa gpt4 Nike

版本 1 和版本 2 有什么区别?他们似乎在我的情况下做同样的事情,但我到处都读到版本 1 是更好的方法。但是为什么?

public BufferedImage getImage(Icon icon) {
int w = icon.getIconWidth();
int h = icon.getIconHeight();

// version 1
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
BufferedImage image = gd.getDefaultConfiguration().createCompatibleImage(w, h, Transparency.OPAQUE);

// version 2
// BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

Graphics2D g = image.createGraphics();
icon.get().paintIcon(null, g, 0, 0);
g.dispose();

return image;
}

câu trả lời hay nhất

一般来说,第一种方法生成的 Hình ảnh 需要较少的转换才能显示。

在可能的最佳情况下,“第一种方法”图像将具有与实际屏幕内存布局完全相同的内存布局,这意味着为了在屏幕上显示图像,可以按原样复制图像数据。仅当屏幕内存布局为 ARGB(每个组件 8 位)时,“第二种方法”图像也是如此,并且在所有其他情况下,图像必须(自动且对用户代码透明)转换为目标格式。

真实案例介于两者之间,并且可能涉及更多:

  • 计算机可以有多个配置不同的图形设备(多个视频卡);
  • 用户可以在程序运行时更改图形配置;
  • 操作系统本身可以更改图形配置(想想 Win7 禁用或启用 Aero 的情况)。

理论上,每次 Hình ảnh 格式和 GraphicsConfiguration 格式变得不兼容时,您都应该重新创建图像。

实际上,您可以使用new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB)(或任何其他适合您需要的特定图像类型)直到您可以证明它正是泛型的用法BufferedImage 导致您的应用程序运行缓慢(因为转换为目标设备格式)或消耗过多内存(因为转换需要额外的内存)。

关于java - 使用 Transparency.OPAQUE 的 createCompatibleImage 和使用 BufferedImage.TYPE_INT_ARGB 的简单 BufferedImage 构造函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605949/

26 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress