プログラムの意味を解説してください

このQ&Aのポイント
  • この記事では、あるプログラムの意味について解説します。
  • プログラムの意味がわからない方に向けて、わかりやすく解説します。
  • プログラムの意味について解説します。わからない部分を具体的に解説します。
回答を見る
  • ベストアンサー

意味がわかりません

このようなプログラムがあるのですが少し意味がわからなくて困っています。わかる方解説などお願いしますm(_ _)m try{mt.waitForAll(); } catch( InterruptedException e ) { } int w = img.getWidth(this); int h = img.getHeight(this); int[] pixels = new int[w * h]; int[] epixels = new int[w * h]; int[] uepixels = new int[w * h]; int scan = w; int offset = 0; PixelGrabber pg = new PixelGrabber(img,0,0,w,h,pixels,0,scan); try{pg.grabPixels(); } catch(InterruptedException e) { ; }

  • mos21
  • お礼率46% (128/273)
  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

JavaのAPIリファレンスは参照していますか。 ある程度、コンストラクタやメソッドの意味がわかると思います。 mtはjava.awt.MediaTrackerクラスの変数でしょうか。 imgはjava.awt.Imageクラスの変数でしょうか。 # epixels,uepixels,offsetが未使用ですが…。

参考URL:
http://java.sun.com/j2se/1.4/ja/docs/ja/api/
mos21
質問者

補足

回答ありがとうございました。epixels,uepixels,offsetに関してはこの後で出て来るのですが、とりあえずこの部分がわからなかったので聞いてみました(^^; 参考書を見てみたのですがmtやimgなどが載っていなかったもので。 

関連するQ&A

  • プログラムで

    以前も似たような質問をしたのですが、いろいろとやってみたのですがわからなくてまた質問しました。現在、次のようなプログラムを書いています。 int w = img.getWidth(this); int h = img.getHeight(this); int[] pixels = new int[w * h]; int[] epixels = new int[w * h]; int[] uepixels = new int[w * h]; int scan = w; int offset = 0; PixelGrabber pg = new PixelGrabber(img,0,0,w,h,pixels,0,scan); try{pg.grabPixels(); } catch(InterruptedException e){;} for(int i=0; i < w*h ; i++){ int r = (int)(pixels[i]&0x00ff0000); if (r!=0x00000000){r = ((int)((pixels[i]&0x00ff0000)*0.5)&0x00ff0000);} int g = (int)(pixels[i]&0x0000ff00); if (g!=0x00000000){g = ((int)((pixels[i]&0x0000ff00)*0.5)&0x0000ff00);} int b = (int)(pixels[i]&0x000000ff); if (b!=0x00000000){b = ((int)((pixels[i]&0x000000ff)*0.5)&0x000000ff);} if((ra.nextInt()%2)!=0) { epixels[i] = 0xff000000| r | g | b ; uepixels[i]=pixels[i]; } else { epixels[i] = pixels[i]; uepixels[i] = 0xff000000| r | g | b ; } (Exception ex){;} } しかし、これですとiが1進む毎にランダムに真または偽をとってしまうため、実際に動かしてみた所「砂嵐」のように画像が表示されました。このランダムにとるのを、1ライン目はそのままの明るさで2ライン目は明るさ半減していて3ライン目も明るさ半減していて・・・といった感じにライン毎にランダムに「そのままの明るさのライン」か「明るさが半減しているライン」かをとるように改良するにはどうしたらいいでしょうか?お願いします。

    • ベストアンサー
    • Java
  • コンパイルできません

    imgにオリジナルの画像データを格納して、それを配列pixelsに格納した後、またpixelsをimg2等に格納してimg2を画面上に表示する。というものを作りたいのですが、コンパイルできなくて困っています。次はプログラムの一部です。pixelsに格納するところでエラーが出てしまいます。エラー内容は シンボルを解釈処理できません。 シンボル: クラス PixelGrabber 位置 : na3 の クラス PixelGrabber pg = new PixelGrabber(img,0,0,w,h,pixels,0,scan) と表示されます。 わかるかたいましたらお願いします。 img = Toolkit.getDefaultToolkit().createImage(imagedata); int w,h; w = (int)getSize().width; h = (int)getSize().height; buffer = this.createImage(w,h); bufferGraphics = buffer.getGraphics(); } public void paint(Graphics g){ int w,h; w = (int)getSize().width; h = (int)getSize().height; int[] pixels = new int[w * h]; int scan = w; int offset = 0; PixelGrabber pg = new PixelGrabber(img,0,0,w,h,pixels,0,scan); try{ pg.grabPixels(); } catch(InterruptedException e){ ; } bufferGraphics.drawImage(img,0,0,this); bufferGraphics.setColor(Color.black); //処理を10回繰り返す for(int j=0; j<10; j++){ //2から1002の中で乱数を1つranに取得 int ran = (int)(Math.random() * 1000)+2; for(int i=0;i<h;i+=ran){ //ranの値にしたがって画面上にラインを表示 bufferGraphics.drawLine(0,i,w,i); } g.drawImage(buffer,0,0,null); } }

    • ベストアンサー
    • Java
  • Javaで画素

    Javaについて質問したいことがあります。 Javaでjpgの白黒画像を読み取った後、画像の一番上にある黒画素のY座標を求めたいのですが、うまくいきません。ちなみに、下が現在作っているプログラムです。 どうすれば一番上にある黒画素のY座標を求める事が出来るのでしょうか? 教えてください。お願いします。 import java.awt.*; import java.applet.*; import java.awt.image.MemoryImageSource; import java.awt.image.PixelGrabber; import java.awt.image.*; import java.awt.Graphics; public class image5 extends Applet { Image img; int img_width, img_height; public void init(){ img = getImage(getDocumentBase(), "test.jpg"); } public void paint(Graphics g){ img_width = img.getWidth(this); img_height = img.getHeight(this); g.drawImage(img, 0, 0, this); int pixels[] = new int[img_width * img_height]; PixelGrabber pg = new PixelGrabber(img, 0, 0, img_width, img_height, pixels, 0, img_width); try{ pg.grabPixels(); }catch(InterruptedException e){ System.err.println("interrupted waiting for pixels!"); return; } int tx = 0; int ty = 0; int ti = 0; int maxY = 0; for(ty = 0; ty < img_height; ty++){ while(ti < 1){ for(tx = 0; tx < img_width; tx++){ if((pixels[ty * img_width + tx] & 255) > 128){ maxY = ty; ti++; } } } } } }

  • 意味がわかりません

    for(int i=0; i < w*h ; i++){ try{ int r = (int)(pixels[i]&0x00ff0000); if (r!=0x00000000){r = ((int)((pixels[i]&0x00ff0000)*90/100)&0x00ff0000);} int g = (int)(pixels[i]&0x0000ff00); if (g!=0x00000000){g = ((int)((pixels[i]&0x0000ff00)*90/100)&0x0000ff00);} int b = (int)(pixels[i]&0x000000ff); if (b!=0x00000000){b = ((int)((pixels[i]&0x000000ff)*90/100)&0x000000ff);} if((((w+i)/w)%2)!=0){epixels[i] = 0xff000000| r | g | b ;uepixels[i]=pixels[i];} else {epixels[i] = pixels[i];uepixels[i] = 0xff000000| r | g | b ;} }catch(Exception ex){;} } このようなプログラムがあるのですが、何をしているのかがわかりません。 見づらいかもしれませんがどなたかわかる方よろしくお願いします。

  • Image を90度回転して、新しいImageを作成するには?

    Image データがあったとして、それを90度回転させた別のImageを作成したいのですが、すごく時間がかかります。 もっといいやり方があると思うのですが、ネットで調べても方法が見つかりませんでした。 今採用しているのは下記のようなやり方です。 もっと短時間でImage作成できる、良い方法をご教授頂けないでしょうか? PixelGrabber pg_f = new PixelGrabber(oldimg, 0, 0, oldw, oldh, old_pixel, 0, oldw); try{ pg_f.grabPixels(); } catch (InterruptedException e){ return null; } int trans = ~0x00000000; for (int x = 0; x < oldw; x++) { for (int y = 0; y < oldh; y++) { new_pixel[y + (newh - x - 1) * neww] = old_pixel[x + oldw * y] & trans; } } Image new_img = Toolkit.getDefaultToolkit().createImage(new MemoryImageSource(neww, newh, new_pixel, 0, neww)); MediaTracker mediaTracker = new MediaTracker(frame); mediaTracker.addImage(new_img, 0); try { mediaTracker.waitForID(0); } catch (InterruptedException ie) { System.err.println(ie); System.exit(1); }

  • 画像の縮小のプログラムのエラーについて教えて下さい

     java初心者です、宜しくお願いします。  画像の縮小のプログラムを色々と他のサンプルコードとかを参考にしながら 書きましたが、黒い四角形がWindowに表示されるだけです。  プログラム自体のエラーは表示されません。  一体どこが悪いのでしょうか、宜しくお願いします。 ===================================================== public class reSizedIImage extends Applet { Image img ; private MediaTracker tracker; BufferedImage bufimg ; BufferedImage re_img ; public void init() { setBackground( Color.white ) ; img = Toolkit.getDefaultToolkit().getImage( "a.jpg" ) ; tracker = new MediaTracker( this ) ; tracker.addImage( img , 1 ) ; try { // tracker.waitForID( 1 ) ; } catch ( Exception ex ) { ex.printStackTrace() ; } int imgw = img.getWidth( this ) ; int imgh = img.getHeight( this ) ; System.out.println(" imgw = " + imgw + " imgh = " + imgh ) ; int re_width = 300 ; int re_height = 300 ; bufimg = new BufferedImage( img.getWidth( this ) , img.getHeight( this ) , BufferedImage.TYPE_INT_RGB ) ; re_img = new BufferedImage( re_width , re_height , BufferedImage.TYPE_INT_RGB ) ; AffineTransformOp ato = new AffineTransformOp ( AffineTransform.getScaleInstance ( ( double )re_width / img.getWidth( this ) , ( double ) re_height / img.getHeight( this ) ) , null ) ; ato.filter( bufimg , re_img ) ; int re_w = re_img.getWidth(this); int re_h = re_img.getHeight(this); System.out.println(" re_img_w = " + re_w + " re_img_h = " + re_h ) ; } public void paint( Graphics g ) { g.drawImage( re_img , 200 , 200 , this ) ; } }

    • ベストアンサー
    • Java
  • イメージのリサイズが表示されない

    JAVA初心者です、宜しくお願い致します。 イメージをリサイズするコードを書きましたが、うまく表示されません。 コードにはエラーは出ていません、原因が分かりません。 ご教示宜しく致します。 ====================================================================== public class reSizedIImage extends Applet { Image img ; private MediaTracker tracker; BufferedImage bufimg ; BufferedImage re_img ; public void init() { setBackground( Color.white ) ; img = Toolkit.getDefaultToolkit().getImage( "a.jpg" ) ; tracker = new MediaTracker( this ) ; tracker.addImage( img , 1 ) ; try { //イメージのロードが完了するまで待機 tracker.waitForID( 1 ) ; } catch ( Exception ex ) { ex.printStackTrace() ; } int imgw = img.getWidth( this ) ; int imgh = img.getHeight( this ) ; System.out.println(" imgw = " + imgw + " imgh = " + imgh ) ; int re_width = 300 ; int re_height = 300 ; bufimg = new BufferedImage( img.getWidth( this ) , img.getHeight( this ) , BufferedImage.TYPE_INT_RGB ) ; re_img = new BufferedImage( re_width , re_height , BufferedImage.TYPE_INT_RGB ) ; AffineTransformOp ato = new AffineTransformOp ( AffineTransform.getScaleInstance ( ( double )re_width / img.getWidth( this ) , ( double )re_height / img.getHeight( this ) ) , null ) ; ato.filter( bufimg , re_img ) ; int re_w = re_img.getWidth(this); int re_h = re_img.getHeight(this); System.out.println(" re_img_w = " + re_w + " re_img_h = " + re_h ) ; } public void paint( Graphics g ) { g.drawImage( re_img , 200 , 200 , this ) ; } }

    • ベストアンサー
    • Java
  • int型について

    1枚の静止画像の明るさを、1行おきにではなくてランダムに、元の色使いのままの行と、明るさを半減した行を持つという画像を2枚作成したいのですが、次のプログラムの記述ではif((r.nextInt()%2)!=0){の部分でintは間接参照できません。というエラーが出てしまいました。なぜでしょうか?わかる方いましたらお願いします。 先に記述してあるプログラムを後で記述したプログラムに改良したところエラーが起こってしまいました。 こちらが改良前で if((((w+i)/w)%2)!=0){ epixels[i] = 0xff000000| r | g | b ; uepixels[i]=pixels[i];} else {    epixels[i] = pixels[i];uepixels[i] =  0xff000000| r | g | b ;} こちらが改良後です。 if((r.nextInt()%2)!=0){ epixels[i] = 0xff000000|r|g|b; uepixels[i] = pixels[i]; } else{ epixels[i] = pixels[i]; uepixels[i] = 0xff000000|r|g|b; }

    • ベストアンサー
    • Java
  • プログラムについて

    javaを使って静止画像にラインをつけて、その奇数ライン画像(偶数ラインは輝度が下がっている画像)と偶数ライン画像(奇数ラインは輝度が下がっている画像)の2枚の画像を1/100秒間隔で交互に表示させ、実際に見ているぶんには普通の静止画像が表示されているというプログラムを作りました。この輝度が下がっているところは奇数ラインと偶数ラインのように決まっているのですが、これを輝度が下がっているところがランダムになるようにとりたいのですがどうるればよいかわかりません... わかる方いましたら何かアドバイスなどお願いします。m(_ _)m for(int i=0; i < w*h ; i++){ try{ int r = (int)(pixels[i]&0x00ff0000); if (r!=0x00000000){r = ((int)((pixels[i]&0x00ff0000)*90/100)&0x00ff0000);} int g = (int)(pixels[i]&0x0000ff00); if (g!=0x00000000){g = ((int)((pixels[i]&0x0000ff00)*90/100)&0x0000ff00);} int b = (int)(pixels[i]&0x000000ff); if (b!=0x00000000){b = ((int)((pixels[i]&0x000000ff)*90/100)&0x000000ff);} if((((w+i)/w)%2)!=0){epixels[i] = 0xff000000| r | g | b ;uepixels[i]=pixels[i];} else {epixels[i] = pixels[i];uepixels[i] = 0xff000000| r | g | b ;} }catch(Exception ex){;} } これがそのプログラムの、交互に表示している場所だと思うのですが。

    • ベストアンサー
    • Java
  • ピクセル情報について

    画像を読み込んでピクセル情報を取得して、 R.G.B値を操作しようとして次の様にプログラムを組みました。 (抜粋ですみません) pg = new PixelGrabber(img1,0,0,width,height,pixel,0,width); try { pg.grabPixels(); System.out.println("pg ok"); //デバッグ表示用 } catch(InterruptedException e) { System.out.println(e); } for(int i=0; i<width*height; i++) { int pix = pixel[i]; int red = 0xff & (pix >> 16); int green = 0xff & (pix >> 8); int blue = 0xff & pix; red += uppoint; green += uppoint; blue += uppoint; pixel[i] = (0xff000000 | red<<16 | green<<8 | blue); } 旨く動けばR.G.B値にuppoint分の数値が足されるはずなんですが、エラーがでてしまいます。 何処が悪いのか判らなくて困っています。 どなたか教えていただけないでしょうか?

専門家に質問してみよう