- - PR -
forループ
«前のページへ
1|2|3
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-04 11:19
処理を付け足していたのを忘れてました。
色はきちんと表示されました。すみません。
はずかしながらデバッグにeclipseは使っていません。 System.outで表示させるぐらいしかしていません。 eclipseお薦めですか? | ||||
|
投稿日時: 2005-04-04 13:04
System.out.println によるデバックは基本で、ある意味十分でもあるんですが、 止めたり動かしたり、変数を見たり変えたり、はデバックにとても有益です。 デバッカなら何でもいいんですが、今なら eclipse でしょう。 会社や客先の方針があってそれに制約されるならしょうがないですが。 eclipse の登場と普及は java10年の歴史のなかの最大の事件と思います。 ぜひ。 ところで fill の性能はどんな感じ? C と比べてどうでした? | ||||
|
投稿日時: 2005-04-05 02:45
実行速度は前(下記のソースでのコメントアウト部)にくらべて数倍も早くなりました。
しかし、下記のソースコードでは画面の再描画がされずにフリーズしたようになってしまいます。 Color pixel = new Color(image.getRGB(loop1,loop2)); でピクセル値を取得して temp.setRGB(loop1,loop2,blue.getRGB()); でピクセル値を変更するときちんと再描画されるのですが... どこか間違っているでしょうか? private BufferedImage image; image=proces(image); ・ ・ ・ ・ private BufferedImage proces(BufferedImage image) { BufferedImage temp = new BufferedImage(image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_ARGB); WritableRaster raster = image.getRaster(); int colorData[] = new int [4]; int PixelColor[] = new int [4]; PixelColor[0] = 0; PixelColor[1] = 0; PixelColor[2] = 255; int PixelColor1[] = new int [4]; PixelColor1[0] = 255; PixelColor1[1] = 0; PixelColor1[2] = 0; //2値変換 for(int loop1 = 0; loop1 < image.getWidth(this); loop1++) { for(int loop2 = 0; loop2 < image.getHeight(this); loop2++) { //Color pixel = new Color(image.getRGB(loop1,loop2)); raster.getPixel(loop1,loop2,colorData); if(colorData[0] > threshold || colorData[1] > threshold || colorData[2] > threshold) { raster.setPixel(loop1,loop2,PixelColor1); //temp.setRGB(loop1,loop2,blue.getRGB()); } else{ raster.setPixel(loop1,loop2,PixelColor); //temp.setRGB(loop1,loop2,red.getRGB()); } } } return temp; } | ||||
|
投稿日時: 2005-04-05 09:55
「数倍も早く」と「フリーズしたように」は矛盾するように思えますが... そういうときは for に System.out.println でも入れてみましょう。 どうなりますか? 「数倍も早く」は何に比べて数倍ですか? うまくいくソースうまくいかないソースを並べて提示していただけると 評価しやすいです。 //Color pixel = new Color(image.getRGB(loop1,loop2)); この pixel をどういう風にしたらうまくいきましたか? >raster.setPixel(loop1,loop2,PixelColor); temp に setPixel するなら WritableRaster は temp.getRaster(); で取得する必要がありますよ。 提示ソースでは temp には書かれていません。 もとの image と同じ画像です。 「フリーズしたように」は別の原因でしょうね。 [ メッセージ編集済み 編集者: NaN 編集日時 2005-04-05 10:09 ] [ メッセージ編集済み 編集者: NaN 編集日時 2005-04-05 11:00 ] | ||||
|
投稿日時: 2005-04-07 15:31
すみません、返信遅れました。
ソース1がうまくいく、ソース2がうまくいかないプログラムです。 それぞれに時間を取得する関数をはさんで実行させました。 その結果、ソース1よりもソース2の方が数倍早かったです。 しかしソース2では画面がフリーズしたようになってしまいます。 ソース1: private BufferedImage proces(BufferedImage image) { BufferedImage temp = new BufferedImage(image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_ARGB); //2値変換 for(int loop1 = 0; loop1 < image.getWidth(this); loop1++) { for(int loop2 = 0; loop2 < image.getHeight(this); loop2++) { Color pixel = new Color(image.getRGB(loop1,loop2)); if(pixel.getRed() > threshold || pixel.getGreen() > threshold || pixel.getBlue() > threshold) { temp.setRGB(loop1,loop2,blue.getRGB()); } else{ temp.setRGB(loop1,loop2,red.getRGB()); } } } return temp; } ソース2: private BufferedImage proces(BufferedImage image) { BufferedImage temp = new BufferedImage(image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_ARGB); WritableRaster raster = image.getRaster(); int colorData[] = new int [4]; int PixelColor[] = new int [4]; PixelColor[0] = 0; PixelColor[1] = 0; PixelColor[2] = 255; int PixelColor1[] = new int [4]; PixelColor1[0] = 255; PixelColor1[1] = 0; PixelColor1[2] = 0; //2値変換 for(int loop1 = 0; loop1 < image.getWidth(this); loop1++) { for(int loop2 = 0; loop2 < image.getHeight(this); loop2++) { raster.getPixel(loop1,loop2,colorData); if(colorData[0] > threshold || colorData[1] > threshold || colorData[2] > threshold) { raster.setPixel(loop1,loop2,PixelColor1); } else{ raster.setPixel(loop1,loop2,PixelColor); } } } return temp; } | ||||
|
投稿日時: 2005-04-07 15:49
これが良く理解できません。 「数倍も早く」と「フリーズしたように」は矛盾していませんか? ソース1は getRGB - setRGB、 ソース2は getPixel - setPixel で一見対照的に見えますが、 両ソース、まったく違ったことをしています。 ソース1は image を元に生成した temp に setRGB していますが、 ソース2は image を元に生成した temp に で は な く image に setPixel してます。 結局ソース2の proces の return する temp は image と同一の画像内容です。 そういうことを意図しているのですか? | ||||
|
投稿日時: 2005-04-07 16:06
すみません、勘違いしていました。 ソース1とソース2で同様のことをしたかったのですが... ソース2でtempにsetPixelするようにしてやってみます。 |
«前のページへ
1|2|3