スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

TVアニメ『Rewrite』先行上映会に行ってきました。

本日(2016/06/25)東京・時事通信ホールにて行われた、TVアニメ『Rewrite』先行上映会に行ってきました。
P_20160625_161341.jpg
第1話の感想をざっくりと(あんまり書くとネタバレになっちゃうし)。
第1話上映前の舞台挨拶は以下を見ればいいよ↓。


スポンサーサイト

【Java】グレースケールのコード

無駄が多いとか言わない。

---

import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Grayscale extends JFrame {

static Insets insets;

public static void main(String[] args) {
Grayscale sample = new Grayscale();
sample.getContentPane().setPreferredSize(new Dimension(300*4 + 4*3, 904));
sample.pack();
insets = sample.getInsets();
sample.setVisible(true);
}

public Grayscale() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("グレースケール色々");
}

public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;

// オリジナル
BufferedImage originalImage = null;
// 中間値法
BufferedImage middleValue = null;
// NTSC係数による加重平均法
BufferedImage NTSCimage = null;
// 単純平均法
BufferedImage simpleMean = null;
// Gチャンネル法
BufferedImage GChannel = null;
// Rチャンネル法
BufferedImage RChannel = null;
// Bチャンネル法
BufferedImage BChannel = null;
// 中央値法
BufferedImage medianValue = null;
try {
File file = new File("image\\sample.jpg");
originalImage = ImageIO.read(file);
middleValue = ImageIO.read(file);
NTSCimage = ImageIO.read(file);
simpleMean = ImageIO.read(file);
GChannel = ImageIO.read(file);
RChannel = ImageIO.read(file);
BChannel = ImageIO.read(file);
medianValue = ImageIO.read(file);
} catch(Exception e) {
e.printStackTrace();
}

int fontSize = 16;
Font font = new Font("MS 明朝", Font.BOLD, fontSize);
g2.setFont(font);
g2.setColor(Color.red);

AffineTransform at = new AffineTransform();

// オリジナル
at.setTransform(1.0, 0.0, 0.0, 1.0, insets.left, insets.top);
if(originalImage != null) {
g2.drawImage(originalImage, at, null);
g2.drawString("元画像", insets.left, insets.top + fontSize);
}

// 中間値法
at.setTransform(1.0, 0.0, 0.0, 1.0, insets.left, insets.top + originalImage.getHeight() + 4);
if(middleValue != null) {

for(int x = 0; x < middleValue.getWidth(); x++) {
for(int y = 0; y < middleValue.getHeight(); y++) {
int color = middleValue.getRGB(x, y);
int gray = getMiddleValue(r(color), g(color), b(color));
int c = rgb(gray, gray, gray);
middleValue.setRGB(x, y, c);
}
}
g2.drawImage(middleValue, at, null);
g2.drawString("中間値法", insets.left, insets.top + originalImage.getHeight() + 4 + fontSize);
}

// NTSC係数による加重平均法
at.setTransform(1.0, 0.0, 0.0, 1.0, insets.left + originalImage.getWidth() + 4, insets.top);
if(NTSCimage != null) {

for(int x = 0; x < NTSCimage.getWidth(); x++) {
for(int y = 0; y < NTSCimage.getHeight(); y++) {
int color = NTSCimage.getRGB(x, y);
int gray = (2 * r(color) + 4 * g(color) + b(color)) / 7;
int c = rgb(gray, gray, gray);
NTSCimage.setRGB(x, y, c);
}
}
g2.drawImage(NTSCimage, at, null);
g2.drawString("NTSC係数による加重平均法", insets.left + originalImage.getWidth() + 4, insets.top + fontSize);
g2.drawString("Y = ( 2 * R + 4 * G + B ) / 7", insets.left + originalImage.getWidth() + 4, insets.top + fontSize * 2);
}

// 単純平均法
at.setTransform(1.0, 0.0, 0.0, 1.0, insets.left + originalImage.getWidth() + 4, insets.top + originalImage.getHeight() + 4);
if(simpleMean != null) {

for(int x = 0; x < simpleMean.getWidth(); x++) {
for(int y = 0; y < simpleMean.getHeight(); y++) {
int color = simpleMean.getRGB(x, y);
int gray = (r(color) + g(color) + b(color)) / 3;
int c = rgb(gray, gray, gray);
simpleMean.setRGB(x, y, c);
}
}
g2.drawImage(simpleMean, at, null);
g2.drawString("単純平均法", insets.left + originalImage.getWidth() + 4, insets.top + originalImage.getHeight() + 4 + fontSize);
}

// Gチャンネル法
at.setTransform(1.0, 0.0, 0.0, 1.0, insets.left + originalImage.getWidth() * 2 + 4 * 2, insets.top);
if(GChannel != null) {

for(int x = 0; x < GChannel.getWidth(); x++) {
for(int y = 0; y < GChannel.getHeight(); y++) {
int color = GChannel.getRGB(x, y);
int c = rgb(g(color), g(color), g(color));
GChannel.setRGB(x, y, c);
}
}
g2.drawImage(GChannel, at, null);
g2.drawString("Gチャンネル法", insets.left + originalImage.getWidth() * 2 + 4 * 2, insets.top + fontSize);
}

// Rチャンネル法
at.setTransform(1.0, 0.0, 0.0, 1.0, insets.left + originalImage.getWidth() * 2 + 4 * 2, insets.top + originalImage.getHeight() + 4);
if(RChannel != null) {

for(int x = 0; x < RChannel.getWidth(); x++) {
for(int y = 0; y < RChannel.getHeight(); y++) {
int color = RChannel.getRGB(x, y);
int c = rgb(r(color), r(color), r(color));
RChannel.setRGB(x, y, c);
}
}
g2.drawImage(RChannel, at, null);
g2.drawString("Rチャンネル法", insets.left + originalImage.getWidth() * 2 + 4 * 2, insets.top + originalImage.getHeight() + 4 + fontSize);
}

// Bチャンネル法
at.setTransform(1.0, 0.0, 0.0, 1.0, insets.left + originalImage.getWidth() * 3 + 4 * 3, insets.top);
if(BChannel != null) {

for(int x = 0; x < BChannel.getWidth(); x++) {
for(int y = 0; y < BChannel.getHeight(); y++) {
int color = BChannel.getRGB(x, y);
int c = rgb(b(color), b(color), b(color));
BChannel.setRGB(x, y, c);
}
}
g2.drawImage(BChannel, at, null);
g2.drawString("Bチャンネル法", insets.left + originalImage.getWidth() * 3 + 4 * 3, insets.top + fontSize);
}

// 中央値法
at.setTransform(1.0, 0.0, 0.0, 1.0, insets.left + originalImage.getWidth() * 3 + 4 * 3, insets.top + originalImage.getHeight() + 4);
if(medianValue != null) {

for(int x = 0; x < medianValue.getWidth(); x++) {
for(int y = 0; y < medianValue.getHeight(); y++) {
int color = medianValue.getRGB(x, y);
int gray = getMedianValue(r(color), g(color), b(color));
int c = rgb(gray, gray, gray);
medianValue.setRGB(x, y, c);
}
}
g2.drawImage(medianValue, at, null);
g2.drawString("中央値法", insets.left + originalImage.getWidth() * 3 + 4 * 3, insets.top + originalImage.getHeight() + 4 + fontSize);
}
}

public static int a(int c){
return c>>>24;
}
public static int r(int c){
return c>>16&0xff;
}
public static int g(int c){
return c>>8&0xff;
}
public static int b(int c){
return c&0xff;
}
public static int rgb(int r,int g,int b){
return 0xff000000 | r <<16 | g <<8 | b;
}
public static int argb(int a,int r,int g,int b){
return a<<24 | r <<16 | g <<8 | b;
}

public static int getMiddleValue(int r, int g, int b) {
int max = 0;
int min = 0;

if(r >= g) {
if(b >= r) {
max = b;
min = g;
} else if(b >= g) {
max = r;
min = g;
} else {
max = r;
min = b;
}
} else {
if(b >= g) {
max = b;
min = r;
} else if(b >= r) {
max = g;
min = r;
} else {
max = g;
min = b;
}
}

return (max + min) / 2;
}

public static int getMedianValue(int r, int g, int b) {
int result = 0;

if(r >= g) {
if(b >= r) {
result = r;
} else if(b >= g) {
result = b;
} else {
result = g;
}
} else {
if(b >= g) {
result = g;
} else if(b >= r) {
result = b;
} else {
result = r;
}
}

return result;
}
}

---

【結果】
グレースケール結果0
グレースケール結果1
グレースケール結果2



【参考】
osakana.factory - グレースケールのひみつ
-> https://ofo.jp/osakana/cgtips/grayscale.phtml
Java画像処理をはじめよう。初めての画像処理(・∀・) - プログラムdeタマゴ
-> http://nodamushi.hatenablog.com/entry/20111012/1318436587

”ファン感謝イベントをしよう!イベント名は『リトルバスターズ!~Refrain~&EX感謝イベント』だ!”に参加してきました

”ファン感謝イベントをしよう!イベント名は『リトルバスターズ!~Refrain~&EX感謝イベント』だ!”に参加してきました。


会場の市川市文化会館(イベント終了後に撮影しました)

ハッピーバースディー

ハッピーバースディ―今日5月18日は私の1年ぶり22回目の誕生日になります



いい加減この画像を使わないですむようになりたい

Character1に行ってきたよ(画像多いです)

お久しぶりです。

4月29日開催のcharacter1(注:全年齢対象のイベントです。やたら肌色成分が多かったりしますが、全年齢対象のイベントなのです。エロゲメーカーのブースがほとんどでも全年齢対象なのです)に行ってきました。
DSC_0119.jpg


以下、画像(80枚)
NEXT≫
プロフィール

Author:えんたん(KABUTO WORK'S)
アプリ開発だったり感想だったりてきとーにやってきます

作成物置場
KABUTO WORK'S.Garage

最新記事
最新コメント
カテゴリ
月別アーカイブ
検索フォーム
最新トラックバック
RSSリンクの表示
アクセスカウンター
相互リンク
二次元世界を追い駆ける日々
二次元世界観測所
鍵っ子×漫画等の感想ブログ

相互リンク随時募集中

ついったー
広告
ばなー
Key Official HomePage
最速VisualAntena
TVアニメ『リトルバスターズ!』公式サイト
<物語>シリーズ セカンドシーズン
Angel Beats!-1st beat-
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。