Giriş
Şu satırı dahil ederiz.
constructor
Şöyle yaparız.
Şöyle yaparız.
Nesneye çizmek için Graphics döndürür. Şöyle yaparız.
Şöyle yaparız.
RGB olan bir resimden ARGB olan yeni bir nesne kurmak için şöyle yaparız.
Şöyle yaparız.
Tüm pikselleri dolaşmak için şöyle yaparız.
Şöyle yaparız.
Tüm pixelleri almak için şöyle yaparız. getRGB metodunun matris döndüren hali gibi düşünülebilir.
Açıklaması şöyle. Eğer renk değerlerine ayrı ayrı erişmek gerekiyorsa bu yöntem çok verimli olmayabilir.
Hız için getRaster() metodu kullanılabilir. Şöyle yaparız.
Şöyle yaparız.
Nesneyi matrise çevirmek için şöyle yaparız.
Nesnenin tüm verisini almak için şöyle yaparız. array olarak null verdiğimiz için offset 0 olur. scansize ise width ile aynıdır.
Şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
Soyut Image sınıfından kalıtır.constructor
Şöyle yaparız.
File f = new File("C:\\sample.png");
BufferedImage img = ImageIO.read (f);
constructor - width + height + type Şöyle yaparız.
BufferedImage img = new BufferedImage(cols, rows,BufferedImage.TYPE_BYTE_GRAY);
Şöyle yaparız.BufferedImage img = new BufferedImage(cols, rows,BufferedImage.TYPE_INT_RGB);
Şöyle yaparız.BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
createGraphics metoduNesneye çizmek için Graphics döndürür. Şöyle yaparız.
Graphics g = img.createGraphics ();
getAlphaRaster metoduŞöyle yaparız.
boolean hasAlphaChannel = img.getAlphaRaster() != null;
getGraphic metodu - BufferedImageRGB olan bir resimden ARGB olan yeni bir nesne kurmak için şöyle yaparız.
BufferedImage b2 = new BufferedImage(img.getWidth(), img.getHeight(),
BufferedImage.TYPE_INT_ARGB);
b2.getGraphics().drawImage(img, 0, 0, null);
getHeight metoduŞöyle yaparız.
int height = img.getHeight();
//iterate over every pixel..
for (int y = 0; y < img.getHeight(); y++) {
for (int x = 0; x < img.getWidth(); x++) {
int(color img.getRGB(x, y);
...
}
}
getRaster metoduŞöyle yaparız.
BufferedImage image = ...;
byte[] data =((DataBufferByte) image.getRaster().getDataBuffer()).getData();
Şöyle yaparız.byte[] data = ...;
BufferedImage img = new BufferedImage(cols, rows,BufferedImage.TYPE_BYTE_GRAY);
img.getRaster().setDataElements(0, 0, cols, rows, data);
ÖrnekTüm pixelleri almak için şöyle yaparız. getRGB metodunun matris döndüren hali gibi düşünülebilir.
private static int[][] convertTo2DWithoutUsingGetRGB(BufferedImage image) {
final byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
final int width = image.getWidth();
final int height = image.getHeight();
final boolean hasAlphaChannel = image.getAlphaRaster() != null;
int[][] result = new int[height][width];
if (hasAlphaChannel) {
final int pixelLength = 4;
for (int pixel = 0, row = 0, col = 0; pixel < pixels.length; pixel += pixelLength){
int argb = 0;
argb += (((int) pixels[pixel] & 0xff) << 24); // alpha
argb += ((int) pixels[pixel + 1] & 0xff); // blue
argb += (((int) pixels[pixel + 2] & 0xff) << 8); // green
argb += (((int) pixels[pixel + 3] & 0xff) << 16); // red
result[row][col] = argb;
col++;
if (col == width) {
col = 0;
row++;
}
}
} else {
final int pixelLength = 3;
for (int pixel = 0, row = 0, col = 0; pixel < pixels.length; pixel += pixelLength){
int argb = 0;
argb += -16777216; // 255 alpha
argb += ((int) pixels[pixel] & 0xff); // blue
argb += (((int) pixels[pixel + 1] & 0xff) << 8); // green
argb += (((int) pixels[pixel + 2] & 0xff) << 16); // red
result[row][col] = argb;
col++;
if (col == width) {
col = 0;
row++;
}
}
}
return result;
}
getRGB metodu - int + intAçıklaması şöyle. Eğer renk değerlerine ayrı ayrı erişmek gerekiyorsa bu yöntem çok verimli olmayabilir.
The getRGB() method combines the alpha, red, green and blue values into one int and then returns the result, which in most cases you'll do the reverse to get these values back.Eğer resim alpha kanalını destekliyorsa döndürülen değer ARGB şeklindedir. Açıklaması şöyle
Actually, the getRGB and setRGB methods, despite their names, actually returns and accepts a pixel in 32 bit packed ARGB format. That means that if the color model of your BufferedImage actually contains an alpha channel, leaving the alpha values of the pixel empty (0x00) as you do, will result in an all transparent image...Alpha kanalını etkisiz hale getirmek için şöyle yaparız.
int rgb = 0xff000000 | (r << 16) | (g << 8) | b;
img.setRGB(x, y, rgb);
ÖrnekHız için getRaster() metodu kullanılabilir. Şöyle yaparız.
int width = image.getWidth();
int height = image.getHeight();
boolean hasAlphaChannel = = image.getAlphaRaster() != null;
int pixelLength = 3;
byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
if (hasAlphaChannel)
{
pixelLength = 4;
}
int getRGB(int x, int y)
{
int pos = (y * pixelLength * width) + (x * pixelLength);
int argb = -16777216; // 255 alpha
if (hasAlphaChannel)
{
argb = (((int) pixels[pos++] & 0xff) << 24); // alpha
}
argb += ((int) pixels[pos++] & 0xff); // blue
argb += (((int) pixels[pos++] & 0xff) << 8); // green
argb += (((int) pixels[pos++] & 0xff) << 16); // red
return argb;
}
ÖrnekŞöyle yaparız.
int val = img.getRGB(0, 0);
ÖrnekNesneyi matrise çevirmek için şöyle yaparız.
public int[][] getMatrixOfImage(BufferedImage bufferedImage) {
int width = img.getWidth(null);
int height = img.getHeight(null);
int[][] pixels = new int[width][height];
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
pixels[i][j] = img.getRGB(i, j);
}
}
return pixels;
}
getRGB metodu - x + y + width + height + array + offset + scansizeNesnenin tüm verisini almak için şöyle yaparız. array olarak null verdiğimiz için offset 0 olur. scansize ise width ile aynıdır.
int height = img.getHeight();
int width = img.getWidth();
int[] raw_pixels = img.getRGB(0, 0, width, height, null, 0, width);
getWidth metoduŞöyle yaparız.
int width = img.getWidth();
setRGB metoduŞöyle yaparız.
int val = ...;
img.setRGB(0, 0,val);
Hiç yorum yok:
Yorum Gönder