- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang cố gắng sao chép Hình ảnh đệm
Đã xảy ra sự cố với đối tượng.
tôi đang sử dụng drawImage (Hình ảnh BufferedImage, int x, int y, người quan sát ImageObserver)
phương pháp vẽ hình ảnh gốc lên hình ảnh mới, tôi đang cài đặt BufferedImage.TYPE_INT_ARGB
Tuy nhiên, với mỗi ảnh, khi mình in giá trị màu ảnh mới thì giá trị RGBA hơi khác nhau một chút.
Tôi cần tạo một bản sao của hình ảnh gốc vì tôi có một JPanel
Chứa hình ảnh được vẽ làm nền. Trong các phần khác của ứng dụng, tôi phải lấy hình ảnh từ bảng điều khiển, nhưng tôi muốn trả lại một bản sao để tránh sửa đổi hình ảnh từ nơi khác.
Làm thế nào tôi có thể giải quyết vấn đề này?
Mã số:
nhập java.awt.Color;
nhập java.awt.Graphics2D;
nhập java.awt.image.BufferedImage;
lớp công khai BufferedImageColorBug
{
public static void main (Chuỗi [] a) {
Màu [] màu = {
Màu mới (202.230.186.14),
Màu mới (254,65,188,214),
Màu mới (247.104.197.198),
Màu mới (158,93,79,239),
Màu mới (235,45,57,194),
Màu mới (155,77,126,150),
Màu mới (164.237.20.172),
Màu mới (184,106,97,191),
Màu mới (187,249,135,85),
Màu mới (236,112,98,24)
};
Hình ảnh BufferedImage = BufferedImage mới (colors.length, 1, BufferedImage.TYPE_INT_ARGB);
for (int x = 0; x < color.length; x ++) image.setRGB (x, 0, màu [x].getRGB ());
Bản sao BufferedImage = BufferedImage mới (image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = copy.createGraphics ();
g2d.drawImage (hình ảnh, 0, 0, null);
g2d.dispose();
for (int x = 0; x < color.length; x ++) {
Màu màu = Màu mới (copy.getRGB (x, 0), true);
System.out.println (color.getRed () + "," + color.getGreen () + "," + color.getBlue () + "," + color.getAlpha ());
}
}
}
Đây là đầu ra tôi nhận được:
200,237,182,14
254,66,188,214
247.104.197.198
158,93,79,239
235,45,57,194
155,76,126,150
165,237,19,172
184,105,97,191
186,249,135,85
234,117,96,24
biên tập
Tôi đã nói về việc nhân bản hình ảnh vì đó là mục tiêu của tôi, nhưng với câu hỏi này tôi muốn hiểuTại saogiá trị rgba khác nhau giữa các hình ảnh.
Tôi đã thử sử dụng BufferedImage.TYPE_INT_ARGB_PRE
, nhưng vô ích.
câu trả lời hay nhất
Để tạo một bản sao chính xác của hình ảnh (giả sử tất cả chúng đều cùng loại), bạn có thể thay đổi mã của mình một chút:
Bản sao BufferedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
copy.setData(image.getRaster()); // getRaster() nhanh hơn getData(), vì không có bản sao nào được tạo
for (int x = 0; x < color.length; x++) {
Màu màu = Màu mới(copy.getRGB(x, 0), true);
System.out.println(color.getRed() + "," + color.getGreen() + "," + color.getBlue() + "," + color.getAlpha());
}
Điều này sẽ in giống như bản gốc màu sắc
Màu sắc giống nhau trong mảng.
Tái bút: Ban đầu tôi nghĩ đây là một lỗi, nhưng bây giờ tôi nhận ra có lẽ không phải vậy.
Sau một số thử nghiệm, tôi nhận thấy có một chút khác biệt giữa mã của bạn và mã tôi thường sử dụng để sao chép hình ảnh. Nếu bạn thay đổi quy tắc tổng hợp alpha thành Src
(nghĩa là chỉ có nguồn đóng góp và thay thế hoàn toàn các pixel ở đích), bạn cũng nhận được kết quả như mong đợi:
Bản sao BufferedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = copy.createGraphics();
g2d.setComposite(AlphaComposite.Src); // Thay thế hoàn toàn, mặc định là SrcOver
g2d.drawImage(hình ảnh, 0, 0, null);
g2d.dispose();
for (int x = 0; x < color.length; x++) {
Màu màu = Màu mới(copy.getRGB(x, 0), true);
System.out.println(color.getRed() + "," + color.getGreen() + "," + color.getBlue() + "," + color.getAlpha());
}
Lý do là khi ghép các pixel bán trong suốt thành các pixel hoàn toàn trong suốt, các pixel trong suốt ban đầu ở đích sẽ ảnh hưởng đến kết quả cuối cùng, làm thay đổi giá trị RGBA.
Về java - Vẽ BufferedImage sang BufferedImage khác đang thay đổi giá trị RGBA, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/46363815/
Tôi mới sử dụng JCodec nhưng tôi đang cố chuyển đổi hình ảnh JCodec thành BufferedImage. Thật không may, các phương pháp thực hiện việc này trong JCodec đã không còn được dùng nữa, ngoại trừ những phương pháp chuyển đổi hình ảnh thành Picture8Bit
Đây là mã của tôi: byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
Tôi đang cố gắng sử dụng ImageIO để hiển thị hình ảnh raster chỉ có một băng tần thu được từ tệp DICOM. Tôi không muốn đọc hình ảnh được đệm trực tiếp bằng ImageIO vì tôi cần giá trị thực từ tệp (B thu được trực tiếp bằng ImageIO
Tôi có một BufferedImage có tên là originalImage được vẽ trên JPanel. Tôi có một mảng lớp BufferedImage được gọi là lớp và tôi có nó trong originalImag
Tôi đang làm việc về xử lý hình ảnh. Tôi có hình ảnh đệm có kích thước cố định BufferedImage targetImage = new BufferedImage(320, 240,BufferedImage.TYPE_
Tôi gặp sự cố khi vẽ BufferedImages. Tôi đang phát triển trình chỉnh sửa bản đồ dựa trên khối bản đồ 2D và khi tôi vẽ khối bản đồ, nó sẽ vẽ lớp dưới trước rồi đến lớp trên cùng. Như thế này: voi công khai
Xin vui lòng tư vấn. Tôi đang cố gắng vẽ BufferedImage đầu vào thành BufferedImage đầu ra lớn hơn (có chia tỷ lệ). Vui lòng xem đoạn mã sau: public class Main { public v
Tôi đang cố gắng tạo một bức tranh khảm bằng Java. Tôi đã tính toán kích thước của hình ảnh mới mà tôi đang tạo và sau đó đối với mỗi hình ảnh phụ sẽ là một phần của bức tranh khảm, tôi đã thực hiện lệnh rút thăm. Trong mã giả: tạo hình ảnh đệm lớn
Tôi gặp phải vấn đề này khi viết một dự án khác, nhưng tôi đã đơn giản hóa mã thành mã bị ảnh hưởng trực tiếp bởi sự cố được mô tả. Gói EntryPoint.java được thay thế.with.real.package.in.code
Vì vậy, tôi đã cố gắng tìm kiếm giải pháp nhưng tôi không thể tìm ra giải pháp có thể chuyển đổi định dạng RGBA sang định dạng RGB. Sẽ là tốt nhất nếu đưa ra một giải pháp đơn giản để chuyển đổi từ BufferedImage sang BufferedImage, nếu không hãy hỏi
Tôi đã kiểm tra các câu hỏi có tên tương tự nhưng chúng không trả lời trường hợp sử dụng này. Về cơ bản, tôi đang ghi đè một số văn bản (văn bản) tại tọa độ đã cho (x, y) Tôi có chức năng sau trong một gói; protected BufferedImage Process2(
Tôi đang phát triển một ứng dụng Java trong đó tôi đang lập trình một số lượng lớn các phiên bản của một đối tượng, mỗi phiên bản có một biểu tượng (BufferedImage) được chọn từ một tập hợp các biểu tượng (dựa trên các tham số ngẫu nhiên) 10 hoặc 2
Chà, Stackoverflow, bạn là dòng cuối cùng của tôi lúc này. Nếu bạn nhìn vào đoạn mã và hình ảnh bên dưới, bạn sẽ nhận thấy ngay có hai tệp có tên là Tile.java TileMap.java. Để biết thêm thông tin về các lớp này, vui lòng
Tôi đang nghiên cứu nội suy hình ảnh và tôi đang sử dụng phép nội suy hai chiều để tăng gấp đôi độ phân giải của hình ảnh trong java bằng cách sử dụng AffinedTransformOp. Tôi đã sử dụng BufferedImage bằng TYPE_4BYTE_ABGR khi phóng to nó. khi tôi cố gắng
Tôi cần tạo một lớp AnimatedImage sẽ lấy một mảng các đối tượng Hình ảnh và hiển thị chúng theo vòng lặp trong một khoảng thời gian nhất định. Ý tưởng là để các thành phần Swing sử dụng lớp AnimatedImage này giống như sử dụng thông thường
Tôi gặp sự cố khi sao chép đối tượng BufferedImage. Tôi đang sử dụng drawImage (hình ảnh BufferedImage, int x, int y, ImageObserver obse
Tôi đang cố gắng chuyển đổi hình ảnh RGB do hàm Robot.createScreenCapture tạo thành hình ảnh ARGB. Mục tiêu của tôi là đặt độ trong suốt khi không có thay đổi về pixel giữa hai hình ảnh nhưng tôi có màu đen. Như hình dưới đây. Ví dụ như sau
Sự khác biệt giữa phiên bản 1 và phiên bản 2 là gì? Họ dường như làm điều tương tự trong trường hợp của tôi, nhưng tôi đã đọc ở khắp mọi nơi rằng phiên bản 1 là cách tiếp cận tốt hơn. Nhưng tại sao? public BufferedImage getImage(Biểu tượng biểu tượng)
Tôi đã nghiên cứu khá nhiều về lỗi tràn ngăn xếp nhưng cho đến nay tôi vẫn chưa tìm ra giải pháp. Tôi gặp lỗi từ Android Studio khi chạy thử nghiệm Robolectric. Dự án của tôi trông như thế này: dự án
Như hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi mong đợi câu trả lời sẽ được hỗ trợ bởi các sự kiện, trích dẫn hoặc chuyên môn, nhưng câu hỏi có thể gây ra tranh luận, tranh luận, bỏ phiếu hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập
Tôi là một lập trình viên xuất sắc, rất giỏi!