ビットマップを二値化した後の座標取得のご相談

このQ&Aのポイント
  • VB6.0からVC++2008(Express Edition)に乗り換えて画像処理を試みています。
  • ビットマップ画像を二値化して,指定範囲内の長方形の平均高さを調べようとしています。
  • 二値化後の白黒画像の座標値の読み方が分からず,長方形の高さを算出できません。ご助言いただけると幸いです。
回答を見る
  • ベストアンサー

ビットマップを二値化した後の座標取得のご相談

ビットマップを二値化した後の座標取得のご相談 最近VB6.0からVC++2008(Express Edition)に乗り換えて画像処理を試みています(WinXP).現在,長方形が写っているビットマップ画像を二値化して,指定範囲内の長方形の平均高さ(白を抽出)を調べようとしています.WEBや文献など調べて,二値化するところまではできたのですが,二値化後の白黒画像の座標値の読み方が分からないため,長方形の高さを算出することができません.もしよろしければご助言いただけましたら幸いに思います. ─────────────────────────────────── VB6.0プログラム(二値化後の処理の部分) Dim Xmin As Double, Xmax As Double //X方向 Dim Ymin As Double, Ymax As Double //Y方向 Dim SumY As Double, AveY As Double Dim Pix As Double ' Xmin = 0 Xmax = Shape1.Width SumY = 0  //長方形の高さの合計 AveY = 0  //長方形の高さの平均 ' For X = Shape1.Left To Shape1.Left + Shape1.Width Ymin = 0 Ymax = 0 ' For Y = Shape1.Top To Shape1.Top + Shape1.Height //囲んだ四角部分において '   //※この下の部分をVC++2008でどのようにすれはいいかわかりません・・・ If picturebox1.Point(X, Y) = RGB(255, 255, 255) Then //白があれば If Ymin = 0 Then //Yminが0であれば Ymin = Y //YminはY End If If Ymax < Y Then //YmaxがYより小さかったら Ymax = Y //YmaxはY End If End If ' Next Y SumY = SumY + Ymax - Ymin //Xごとの長方形の高さの合計 Next X ' AveY = SumY / Xmax //平均高さの算出 ─────────────────────────────────── ここからVC++2008(二値化と計算を一気に行えればいいなと思ってます) for (j = 0; j < rect.Height; j++) {  for (i = 0; i < rect.Width; i++){ //輝度値の取得 B = pBuf[i * Step + j * bmpData->Stride]; //青 G = pBuf[i * Step + 1 + j * bmpData->Stride]; //緑 R = pBuf[i * Step + 2 + j * bmpData->Stride]; //赤 //輝度値の設定(二値化) if ((B >= Threshold) || (G >= Threshold) || (R >= Threshold)) { //白に変換  pBuf[i * Step + j * bmpData->Stride] = 255; //青  pBuf[i * Step + 1 + j * bmpData->Stride] = 255; //緑  pBuf[i * Step + 2 + j * bmpData->Stride] = 255; //赤  //※ここに何かいれればいいと思うのですが,上記の  //※If(picturebox1.Point(X,Y)=RGB(255,255,255))に代わる書き方が分かりません… } else { //黒に変換 pBuf[i * Step + j * bmpData->Stride] = 0; //青 pBuf[i * Step + 1 + j * bmpData->Stride] = 0; //緑 pBuf[i * Step + 2 + j * bmpData->Stride] = 0; //赤 } } 参照WEB http://imagingsolution.blog107.fc2.com/blog-entry-40.htm

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

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

参照WEB元の者です。 私もVB6.0からC++/CLIに乗り換えたクチですが、VB6.0のPSet、Pointは.NETでは, SetPixel、GetPixelとなります。 そのため今回の場合は if (bmp->GetPixel(i, j) == Color::White) という感じになると思います。(やった事が無いので未確認ですが...) ただ、二値化した後の画像データ(Bitmap)をFormat8bppIndexedを使ってモノクロの8Bitのビットマップにし、pBuf[i + j * bmpData->Stride] のように輝度値を参照した方がオススメです。 当然ですが、この場合は if (pBuf[i + j * bmpData->Stride] == 255) となります。

kanemaru_okweb
質問者

お礼

ImagingSol 様 貴重なご助言,誠にありがとうございます!!いつもWEBを見させていただいております.どれも参考になるものが多く,大変勉強になっています.これからも色々な作品が見れますことを楽しみにしております.また,色々とご助言いただけましたら幸いに思います!

kanemaru_okweb
質問者

補足

ご助言いただきました内容を参考に下記の様に変更をしてみました.その結果,指定範囲内の最大値ymaxを取得することはできたのですが・・・最小値yminがどうしても0のままになってしまいます.どこかおかしな部分がありましたら,ご指摘いただけましたら幸いに思います,よろしくお願い致します.(ご助言いただきました内容と変更した内容が全く異なっていましたら申し訳ございません・・・) int i, j;//i:x方向,j:y方向 double ymin,ymax,y; int Bright;//モノクロ輝度値 int B, G, R;//カラー輝度値 int BitCount; int Step; Byte Threshold; //しきい値の取得 bool result = Byte::TryParse(textBox1->Text, Threshold); if (result == false) return; //測定範囲の取得(略) //輝度値を取得、設定領域(四角枠)作成 Rectangle rect = System::Drawing::Rectangle(X0, Y0, W, H); //Lock Imaging::BitmapData^ bmpData = bmp->LockBits(rect, Imaging::ImageLockMode::ReadWrite, bmp->PixelFormat); Byte* pBuf = (Byte*)bmpData->Scan0.ToPointer(); //ビットマップデータのメモリのポインタ BitCount = bmp->GetPixelFormatSize(bmp->PixelFormat); //画像データのビット数 //輝度値の取得、設定 switch (bmp->PixelFormat){ case Imaging::PixelFormat::Format8bppIndexed: //8ビットデータの場合 ymin=0; ymax=0; for (j = 0; j < rect.Height; j++){ for (i = 0; i < rect.Width; i++){ Bright = pBuf[i + j * bmpData->Stride];//輝度値の取得 //輝度値の設定(二値化) if (Bright >= Threshold){ pBuf[i + j * bmpData->Stride] = 255;//白に設定} else{ pBuf[i + j * bmpData->Stride] = 0;//黒に設定} if(pBuf[i+j * bmpData->Stride] == 255){ if(ymin = 0){ymin = j;} if(ymax < j){ymax = j;} }} y = ymax - ymin;} break; //24ビットと32ビットの場合 Step = BitCount / 8; ymin=0; ymax=0; for (j = 0; j < rect.Height; j++){ for (i = 0; i < rect.Width; i++){ //輝度値の取得(略) //輝度値の設定(二値化) if (((B >= Threshold) || (G >= Threshold) || (R >= Threshold)){ //白に変換 pBuf[i * Step +j * bmpData->Stride] = 255;//青 pBuf[i * Step+1+j * bmpData->Stride] = 255;//緑 pBuf[i * Step+2+j * bmpData->Stride] = 255;//赤} else{ //黒に変換 pBuf[i * Step +j * bmpData->Stride] = 0;//青 pBuf[i * Step+1+j * bmpData->Stride] = 0;//緑 pBuf[i * Step+2+j * bmpData->Stride] = 0;//赤} if((pBuf[i * Step +j * bmpData->Stride] == 255) &&(pBuf[i * Step+1+j * bmpData->Stride] == 255) &&(pBuf[i * Step+2+j * bmpData->Stride] == 255)) { if(ymin = 0){ymin = j;} if(ymax < j){ymax = j;} }} break;

その他の回答 (1)

回答No.1

 VC++と言っても画像処理の方法は数多くあるので、具体的にどういう環境で行っているのかが分からないと何も答えられません。 (bmpData->Strideとかいう書き方を見たら、WindowsフォームアプリケーションでBitmapオブジェクトをいじってるように見えますが)  コードを見る限りでは、i がX座標、j がY座標、Stepが1ピクセルのbyte数を表しているようですから、 > If picturebox1.Point(X, Y) = RGB(255, 255, 255) Then //白があれば は if ((pBuf[x * Step + y * bmpData->Stride]==255) && (pBuf[x * Step + 1 + y * bmpData->Stride]==255) && (pBuf[x * Step + 2 + y * bmpData->Stride]==255)) { // 白があれば } という感じでしょうか。  Stepの値が3なら、 Color* pcol = (Color*)(&pBuf[x * Step + y * bmpData->Stride]); if (*pcol == RGB(255, 255, 255)) { // 白があれば } という感じにもできたかな?

kanemaru_okweb
質問者

お礼

magicalpass 様 懇切丁寧なご助言誠にありがとうございます!また,説明不足な点申し訳ございませんでした.環境はおっしゃられる通り,Windowsフォームアプリケーションでビットマップを画像処理しようとしています.またiはX方向,jはY方向であります.再度検討をしてまいりたいと思います!

kanemaru_okweb
質問者

補足

ご助言いただきました内容で解決することができました!!本当にありがとうございました!

関連するQ&A

  • Scilabを使ったジュリア集合の描画プログラム

    今、Scilabを使用してジュリア集合(充填およびそれ以外を含む集合)を描画するプログラムを書いています。 以前書いたC言語のプログラムをもとに書いているのですが、正確に描画できません。どうしたらよいでしょうか。教えてください。 与える条件は右上と左下の座標(複素数形式)と定数Cの値です。 以下に掲載したのが製作したプログラムです。 よろしくお願い致します。 //描画エリアの右上と左下の座標を複素数で設定する Z =[ -1.2-1.2*%i;1.2+1.2*%i]; //複素定数(C)を設定する C=0+0*%i; //描画エリアのx座標とy座標の各最小値と最大値を計算する。 xmin = min(real(Z)); xmax = max(real(Z)); ymin = min(imag(Z)); ymax = max(imag(Z)); Cr = real(C); Ci = imag(C); //描画点数を800×800に設定する。 N = 800; //各増分を計算する。 dx = (xmax-xmin)/(N-1); dy = (ymax-ymin)/(1-N); //プロットデータを"0"で初期化 map=zeros(N,N); //ジュリア集合の描画 i=1; for X=xmin:dx:xmax j=1; for Y=ymax:dy:ymin for k=1:30 x = X ^ 2 - Y ^ 2 + Cr; y = 2 * X * Y +Ci; if x^2 +y^2 > 4 then break; end map(j,i)=k; X=x; Y=y; end j=j+1; end i=i+1; end //プロットするための設定 Re = xmin:dx:xmax; Im = ymax:dy:ymin; clf(0); Sgrayplot(Re,Im,map');

  • C++ グラフ作成

    sin と cosのグラフを作成しようとしているのですが、思うように行かず、悩んでいます。 一応試行錯誤の結果、下のようなプログラムを書いたのですが、コンパイルが成功しても何も表れないという悲しい現実が待っていました。*を表示させる部分を省くと、グラフが書けるのですが、そもそも三角関数を扱っているのにxを角度で表現するということすらできません。 有識者の方の回答をお待ちしています。よろしくお願いします。 なお、開発環境はwindows visual studio 2008のC++です。 #include <stdio.h> #include <math.h> #define Xmax 40 #define Ymax 40 char a[Xmax][Ymax],x,y; int myf(float x); int main(void){ for(x=0;x<Xmax;x++){ for(y=0;y<Ymax;y++){ a[x][y]=' '; } } for(y=0;y<Ymax;y++){ a[Xmax/2][y]='-'; } for(x=0;x<Xmax;x++){ a[x][Ymax/2]='|';} a[Xmax/2][Ymax/2]='+'; for(x=0;x<Xmax;x++){ for(y=0;y<Ymax;y++){ int y = myf(sin(x)); if(y>=0&&y<=1) a[x][y]='*'; } } for(x=0;x<Xmax;x++){ for(y=0;y<Ymax;y++){ int y = myf(cos(x)); if(y>=0&&y<=1) a[x][y]='*'; } } for(x=0;x<Xmax;x++){ for(y=0;y<Ymax;y++){ printf("%c",a[x][y]); } printf("\n"); } } int myf(float x){ double sin(double x); double cos(double x); y=sin(x); y=cos(x); return 5*cos(x); }

  • 現在、エクセルで、選択したグラフの大きさや縦横軸を統一するマクロを作成

    現在、エクセルで、選択したグラフの大きさや縦横軸を統一するマクロを作成中です。 以下のようなマクロまでは作ることができましたが、ひとつだけ不満があります。 それは、初期値です。 できれば、最初に選択したグラフの設定を初期としてダイアログの入力欄に記入してある状態にしたいのですが、どうすればよいかわかりません。 知恵を貸してください!! よろしくお願いいたします!!! Sub 選択したグラフ縦横軸変更() Dim chartObj As ChartObject Dim myObj As Object Dim xmin As Double Dim xmax As Double Dim ymin As Double Dim ymax As Double xmin = Application.InputBox("x軸最小値") xmax = Application.InputBox("x軸最大値") ymin = Application.InputBox("y軸最小値") ymax = Application.InputBox("y軸最大値") For Each myObj In Selection Set chartObj = ActiveSheet.ChartObjects(myObj.Name) With chartObj.Chart.Axes(xlCategory) .MaximumScale = xmax .MinimumScale = xmin End With With chartObj.Chart.Axes(xlValue) .MaximumScale = ymax .MinimumScale = ymin End With Next myObj End Sub

  • 日付範囲指定について

    よろしくお願いします。 年、月をコンボボックスで表示させ、選択できるようにしてあります。jsの内容は以下です。 ----------------------------------------------------- var ymin = 1950; var ymax = 2050; function getToday(){ var t = new Date(); var y = t.getYear(); if(1900 > y){y += 1900;} var m = t.getMonth()+1; var d = t.getDate(); fyear(y); fmonth(m); fday(d); } function fyear(thisyear){ var obj = document.getElementById('year'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function fmonth(thismonth){ var obj = document.getElementById('month'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } ----------------------------------------------------- これを利用して日付範囲指定(例として、2006年1月~2008年8月ような感じ)を行いたいのですが、可能でしょうか? 自分で試した方法ですと、前半(2006年1月)は表示できるのですが、後半(2008年8月)が表示できませんでした。 試したソースは以下 --------------------------------------------------- <!-- var ymin = 1950; var ymax = 2050; function getToday(){ var t = new Date(); var y = t.getYear(); if(1900 > y){y += 1900;} var m = t.getMonth()+1; var d = t.getDate(); fyear(y); fmonth(m); tyear(y); tmonth(m); } function fyear(thisyear){ var obj = document.getElementById('year'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function fmonth(thismonth){ var obj = document.getElementById('month'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } function tyear(thisyear){ var obj = document.getElementById('tyear'); ymin =ymin - 0; ymax =ymax - 0; var j = 1; for(i = ymin; ymax > i; i++){ var str = i.toString() + "年"; obj.options[j] = new Option(str); obj.options[j].value = i; if(i == thisyear){ obj.options[j].selected = true; } j++; } } function tmonth(thismonth){ var obj = document.getElementById('tmonth'); for(i = 1; 12 >= i; i++){ var str = i.toString() + "月"; obj.options[i] = new Option(str); obj.options[i].value = i; if(i == thismonth){ obj.options[i].selected = true; } } } //--> どうかよろしくお願いします。

  • エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛

    エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛、目盛間隔を揃えるにはどのようにしたら良いか教えてください。いくつかwebsiteで調べて下記のようにしてみましたが、x軸の目盛を変更するところで、失敗してしまいます。 よろしくお願いします。 Sub XY軸() Dim Ymin Ymin = InputBox("Y軸の最少?") If IsNumeric(Ymin) Then Range("C2").Value = Ymin Else MsgBox "入力NG!" End If Dim Ymax Ymax = InputBox("Y軸の最大?") If IsNumeric(Ymax) Then Range("C3").Value = Ymax Else MsgBox "入力NG!" End If Dim Y Y = InputBox("目盛間隔?") If IsNumeric(Y) Then Range("C4").Value = Y Else MsgBox "入力NG!" End If Dim xmin xmin = InputBox("X軸の最少?") If IsNumeric(xmin) Then Range("D2").Value = xmin Else MsgBox "入力NG!" End If Dim Xmax Xmax = InputBox("X軸の最大?") If IsNumeric(Xmax) Then Range("D3").Value = Xmax Else MsgBox "入力NG!" End If Dim X X = InputBox("Xの目盛間隔?") If IsNumeric(X) Then Range("D4").Value = X Else MsgBox "入力NG!" End If Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("C2").Value '最小値 .MaximumScale = Range("C3").Value '最大値 .MajorUnit = Range("C4") '目盛間隔 End With With .Axes(xlCategory) .MinimumScale = Range("D2").Value '最小値 .MaximumScale = Range("D3").Value '最大値 .MajorUnit = Range("D4") '目盛間隔 End With End With Next End Sub

  • (C言語)スキャンライン法による三角形作成

    こんにちは! 先週C言語のプログラミングの課題が出て土日もずっと考えたのですが全く意味が分かりません>< どなたか教えてください泣 内容は、スキャンライン法で二次元三角形を作り(三角形の塗りつぶし)、BMPファイルへ出力せよというものです。 1. 3角形を囲む長方形・ (xmin,xmax,ymin,ymax) 2. Y座標をymax~yminまで, 1ずつ減らしながら以下を繰り返す (a)スキャンラインSL(Y=y)発生 (b)SLと3角形との交点(線形補間) (c)交点間の画素を 表示色(r,g,b)で塗る *端点や水平線に注意 よろしくお願いします><

  • 碁盤目の経路数

    某大学院の入試問題で、碁盤目状の経路において視点(0, 0)から終点(xmax, ymax)までの経路を求めるプログラムなのですが、ア~エの所がどうしてもわかりません。教えて頂けないでしょうか。 #include <stdio.h> int xmax, ymax; /* 終点の座標 */ int search_path(int, int); int main(void) { int n; scanf("%d %d", &xmax, &ymax); /* xmaxとymaxを読む */ n = search_path(0, 0); /* (0,0)から(xmax,ymax)まで経路数を求める */ printf("%d\n", n); return 0; } int search_path(int x, int y) { if (ア) return 0; if (イ) return 1; return search_path(ウ) + search_path(エ); }

  • ビットマップを直接編集して背景画像を波打たせる

    質問(1) pixelsは一次元配列で1ラインのx方向の要素を左方向や右方向にシフト量sだけ離れた所へコピーすることにより1ラインの画像のピクセルデータをシフト量sだけずらして波打たせる効果を持たせていることは想像つきますが、これではy方向を考慮した全てのラインをずらすことにはなっていない様な感じがします。y方向はどうなっているのですか? 質問(2) int line = y*bmpdata.Stride/4;で4で割っているのは何故ですか? 質問(3) if(s<0){ //左へコピー for(int x=-s; x<BITMAP_W; x++){ if(x+s>=0){ pixels[line+x+s] = pixels[line+x]; } } } でこのif文の中の条件式x+s>=0はint x=-s;→int x+s=0;…;x++により明らかに常に真ではないですか?もし、そうだとしたらこのif文は必要ないのではないですか? 質問(4) } else if(s>0){ //右へコピー for(int x=BITMAP_W; x>=s; x--){ if(x+s<BITMAP_W){ pixels[line+x] = pixels[line+x-s]; } } } } でこのif文の中の条件式x+s<BITMAP_Wの意味が良く分かりません。 質問(5)(6)(7) for(int y=0; y<BITMAP_H; y++){ … int line = y*bmpdata.Stride/4;の意味が良く分かりません。質問(5) … pixels[line+x+s] = pixels[line+x];でlineを加えているのは何故ですか?質問(6) … pixels[line+x] = pixels[line+x-s];でlineを加えているのは何故ですか?質問(7) C言語、C++言語初心者なので分かりやすく教えて下さい。 宜しくお願いします。 プログラムコード(animation.cpp) //ウェーブエフェクト UINT g_wavecount; const int BITMAP_H = 480; const int BITMAP_W = 320; float g_wavelines[BITMAP_H]; //ウェーブエフェクト初期化 void ResetWave(){ g_wavecount = 0; float r=0, rdelta=3.14f/12;//波の数 float waveh = 3;//波の高さ for(int i=0; i<BITMAP_H; i++){ g_wavelines[i] = sinf(r) * waveh; r += rdelta; } } //ウェーブエフェクト描画 void RenderWave(Gdiplus::Bitmap *bmp){ g_wavecount++; int topline = g_wavecount % BITMAP_H; //ビットマップのロック Gdiplus::BitmapData bmpdata; Gdiplus::Status status = bmp->LockBits( &Gdiplus::Rect(0,0,320,480), Gdiplus::ImageLockModeWrite, bmp->GetPixelFormat(), &bmpdata); if(status != Gdiplus::Ok) return; UINT* pixels = (UINT*)bmpdata.Scan0; //←この行から下のコードが全部分からない。 //ビットマップを加工する for(int y=0; y<BITMAP_H; y++){ //シフト量を取得 int s = (int)g_wavelines[(topline+y)%BITMAP_H]; int line = y*bmpdata.Stride/4; //ピクセルコピー if(s<0){ //左へコピー for(int x=-s; x<BITMAP_W; x++){ if(x+s>=0){ pixels[line+x+s] = pixels[line+x]; } } } else if(s>0){ //右へコピー for(int x=BITMAP_W; x>=s; x--){ if(x+s<BITMAP_W){ pixels[line+x] = pixels[line+x-s]; } } } } bmp->UnlockBits(&bmpdata); }

  • ビットマップ画像の色取得のご相談

    ビットマップ画像の色取得のご相談 WinXPでVC++2008ExpressEditionを使用してWinアプリケーションで画像処理をしようとしています.そこで,現在ビットマップのカラー画像を二値化(閾値判別分析法)するために,各色の抽出してグレースケール化を試みているのですが,色々試したのですがエラーがとれないので,もし間違い等ありましたら,ご助言いただけたらなと思います.何卒よろしくお願いいたします. 【エラー内容】 'System.ArgumentOutOfRangeException' のハンドルされていない例外が System.Drawing.dll で発生しました。追加情報: パラメータは正の値で、高さより小さい値指定しなければなりません。 【流れ】(ボタンを押したら以下三つを実行) 1.ファイルの読み込みピクチャーボックスに表示 2. ビットマップ画像の色の抽出 3. グレースケール化 /*ここから*/ OpenFileDialog^ OpenDlg = gcnew OpenFileDialog; //ファイルを開くダイアログ OpenDlg->Filter ="画像ファイル(*.bmp,*.jpg,*.jpeg,*.png,*.tif,*.tiff,*.ico)|*.bmp;*.jpg;*.jpeg;*.png;*.tif;*.tiff;*.ico"; OpenDlg->ShowDialog(); //ダイアログの表示 if (OpenDlg->FileName == "") { //ファイル名が指定されなかった場合 return; } Bitmap^ bmp; bmp = gcnew Bitmap(OpenDlg->FileName); //Bitmapをファイルより作成 pictureBox1->Image = bmp; //ピクチャボックスへ画像の表示 Bitmap^ bmp1 = gcnew Bitmap(pictureBox1->Image); unsigned char Image_in[480][640][3]; //Image_in[Y][X][3] unsigned char (*Gray)[640] = new unsigned char[480][640]; //(*Gray)[X] = new unsigned char[Y][X] double Y; int i, j; //iがY方向,jがX方向 Color color1; unsigned char R,G,B; // 赤,緑,青成分の抽出 for( i = 1; i < 480; i++) //Y方向 { for( j = 1; j < 640; j++) //X方向 { ////////////////////////////////////////////// /*この辺がエラーの原因だと思うのですが・・・*/ color1 = bmp->GetPixel(i,j); R = color1.R; G = color1.G; B = color1.B; Image_in[i][j][0] = R; Image_in[i][j][1] = G; Image_in[i][j][2] = B; } } //RGB to Gray カラー画像をグレースケール化 for( i = 0; i < 480; i++) //Y方向 { for( j = 0; j < 640; j++) //X方向 { Y = 0.299*Image_in[i][j][0] + 0.587*Image_in[i][j][1] + 0.114*Image_in[i][j][2]; Gray[i][j] = Y; } }

  • 座標でMaxとかSpanとかあるんですが、これはどういう意味なのでしょうか?

    if (this._y >= yMax+ySpan) などのXとかYの後ろにMax・Spanがついてるんですが、これってどういった意味なんでしょうか? どなたか、教えて頂けないでしょうか。 また、こういったものを調べるにはどういう風に探せばいいのでしょうか。 いまは、Googleで【FLASH xamとは】【Actionscript xam 座標】とかで探しているんですが、見つけきらないです。 お願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう