2014年8月21日木曜日

AppMethodに挑戦(13) 画像を扱う第一歩→Oneソースマルチプラットフォームの道は険しい。→いや、そうでもないか。

これはまぁバグじゃないんでしょう。きっと。
仕様としてはこの方が美しいと言える部分もあります。
こうなってる理由もわかります。
でも、やっぱいただけないかなー。
だって#ifdefかかなきゃなんないもんね。。。^^;

ということで、画像を扱う第一歩として、
画像を読み込んで表示させて、メモリを操作して線を描画して表示させるなんてことをやってみました。
●TBitmapに読み込む
●TImageにわりつける
TImage::TBitmapのデータポイントを取得する
●直書きしてみる
っとまぁ、そんなとこです。
で、ですね。。。例によって、WIN32とAndroidの結果ですが。。。。

★WIN32       ★Android
  

そうです。線の色が違う。
そしてデータを取ってきたときの内容が違う。
WIN32の方は、B-G-R-Aの順。
Andridの方は、R-G-B-Aの順。
もちろん、理由はなんとなくわかりますけどねー。
でもねーー。。せっかくOneソースなんだから。。。
なんとかして欲しかったなぁーー。


  1. TBitmap* bmp = new TBitmap;  
  2.   
  3. String gfile = TPath::Combine(TPath::GetDocumentsPath(), "gazou.png");  
  4. bmp->LoadFromFile(gfile);  
  5. TI->Bitmap = bmp;  
  6. TBitmapData B;  
  7. TI->Bitmap->Map(TMapAccess::maReadWrite,B);  
  8. unsigned char* cp = (unsigned char*)B.Data;  
  9. AnsiString as;  
  10. for(int w=0;w<100;w+=4){  
  11.  as.printf("[%02x][%02x][%02x][%02x]",cp[w*4+0],cp[w*4+1],cp[w*4+2],cp[w*4+3]);  
  12.  M1->Lines->Add(as);  
  13. }  
  14. for(int w=0;w<100;w++){  
  15.  char* ccp = (char*)B.GetPixelAddr(w,w);  
  16.  ccp[0] = 0x0;    
  17.  ccp[1] = 0x0;    
  18.  ccp[2] = 0xff;    
  19.  ccp[3] = 0xff;  
  20.  ccp[0+4] = 0x0;    
  21.  ccp[1+4] = 0x0;   
  22.  ccp[2+4] = 0xff;  
  23.  ccp[3+4] = 0xff;  
  24.  ccp[0+8] = 0x0;   
  25.  ccp[1+8] = 0x0;   
  26.  ccp[2+8] = 0xff;  
  27.  ccp[3+8] = 0xff;  
  28. }  
  29. TI->Bitmap->Unmap(B);  

0 件のコメント:

コメントを投稿