データ – 固定ページ 5 – プログラミング – Home

通知
すべてクリア

データ

固定ページ 5 / 6

はお
 はお
(@はお)
ゲスト
結合: 22年前
投稿: 21
 

マットってなに?

ファイルフォーマットはどうなってるの?
テキストファイルに3X3の数値データが存在しますって書いてあると
私は
256 256 256
256 256 256
256 256 256
といったフォーマットなのか
256,256,256
256,256,256
256,256,256
なのか
256
256
256

256
256
256

256
256
256
なのかといろいろと想像が膨らむばかりでいったいどんなデータを読んでてエラーが
おきているのかわかりません。
いったいどんなフォーマットのデータを読むの?

っていうか、もしかして仕様を決めさせようとしていませんか?

とりあえず、こうしたらファイルの1行目が文字列として読み込めた。

if (ar.IsStoring())
{
// TODO: この位置に保存用のコードを追加してください。
}
else
{
// TODO: この位置に読み込み用のコードを追加してください。
char a[10];
ar.ReadString(a,10);
}


返信引用
はお
 はお
(@はお)
ゲスト
結合: 22年前
投稿: 21
 

ちなみにファイルは
200
300
400

と縦に3個「200」「300」「400」と表記し、「texst.txt」として保存しました。


返信引用
かーご
 かーご
(@かーご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

たてです。
アスキーデータを読むプログラムはどうしたら・・・

とりあえず、やりたいことはダイアログのピクチャーボックスに数字を256*256入れたい
んです。

主旨はビットマップの絵が他画面と重なっても消えないようにするなど、拡大しても消えない
1、ファイルを開く(アスキー)
  A、データを読み出す 
2、ボタンを押すと
  A、ビットマップを作る
  B、ビットマップ構造体にイメージデータをいれる
  C、それをウインドウに転送する

それでファイルを開くところだけできないんですよ・・・;;


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

これを一番最初に書いておくべきでしたね。あなたは単に解らないところだけを聞こうと
したのでしょうが、皆さんそこに至るまでの背景が読みとれなくてやきもきしているよう
です。

繰り返しになりますが「使用上の注意」を今一度読み返してみてください。
また、例として挙げるのは適切かどうか解りませんが、↓の質問者とあなたの訊き方(とい
うか情報開示の仕方というか)を見比べてみてください。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200301/03010094.txt
# 本当にこの人初心者か? という疑問は残るのだが。

で、質問です。
・アスキーファイルに書かれているデータは、表示したいビットマップ画像のイメージ
データなんですね?
・ファイルを開くところだけできないということは、他の部分は正しく動いているという
確認がとれているんですね?
・Bの「ビットマップ構造体にイメージデータをいれる」ができているということは、確
認の際にどうやってデータを用意したのか私には解りませんが、そこをアスキーファイル
から読み込む、という形に置き換える所だけできていない、ということですね?
 →ムリにSerializeを使わなくてもfopen(), fread()とかで
  いけそうな気もしますが。


返信引用
かーご
 かーご
(@かーご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

すいません・・以後気をつけます。それぞれの質問についてです
・アスキーファイルに書かれているデータは、表示したいビットマップ画像のイメージデータで
す。
・おそらく、正しく正常してると思います。
・そうです。

まだ出来ないのでよろしくお願いします


返信引用
かーご
 かーご
(@かーご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

ソース書きますね。まずビットマップを作るクラスです。これはくわえました
void CPixmap::makePixmap()
{
  dim_x = 256;

dim_y = 256;
if ( pix == NULL ) {

pix = new BYTE[dim_x*dim_y];

{BITMAPINFOHEADER infoHeader;

int i;
if(pMapBits)delete pMapBits;

infoHeader.biSize = sizeof(BITMAPINFOHEADER);

infoHeader.biWidth = dim_x;

infoHeader.biHeight = dim_y;

infoHeader.biBitCount = 8;

infoHeader.biPlanes = 1;

infoHeader.biXPelsPerMeter = 0;

infoHeader.biYPelsPerMeter = 0;

infoHeader.biClrUsed = 256;

infoHeader.biClrImportant = 0; // nColors;

infoHeader.biCompression = BI_RGB;

infoHeader.biSizeImage = dim_x * dim_y;

int colorAlloc = 256 * sizeof(RGBQUAD); // size of color tables

int bitsAlloc = infoHeader.biSize + colorAlloc;//+ infoHeader.biSizeImage;

pMapBits = (LPBITMAPINFO)new BYTE[bitsAlloc];

memset(pMapBits,80,bitsAlloc*sizeof(BYTE));

pMapBits->bmiHeader = infoHeader;

LPSTR pColor = ((LPSTR)pMapBits + (WORD)(pMapBits->bmiHeader.biSize));

for (i = 0; i < 256; i++)

((WORD*)pColor)[i] = i;
}
}

}


返信引用
かーご
 かーご
(@かーご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

イメージデータは上に書いてあります。
そしてVIEWクラスです
void C***2View::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
m_pixmap->makePixmap();

MakeImage( m_image->pImage, m_pixmap->pix, m_pixmap->dim_x, m_pixmap->dim_y);

flushDisp(IDC_FIGURE);
}

void C****2View::OnPaint()
{
CPaintDC dc(this); // 描画用のデバイス コンテキスト

// TODO: この位置にメッセージ ハンドラ用のコードを追加してください

// 描画用メッセージとして CFormView::OnPaint() を呼び出してはいけません
if( m_pixmap != NULL ) {

int W, H;

CRect rc;

GetDlgItem(IDC_FIGURE)->GetWindowRect(rc);

ScreenToClient(rc);

W = rc.Width();

H = rc.Height();

StretchDIBits(dc,rc.left,rc.top,W,H,0,0,m_pixmap->getDim_x(),m_pixmap->getDim_y
(),m_pixmap->getPix(),m_pixmap->getPMapBits(),DIB_PAL_COLORS,SRCCOPY);
}
}
void C****2View::MakeImage( unsigned short *pImage, BYTE *pix, int size_x,
int size_y )

{

int i;

int size;

size = size_x * size_y;

for( i=0; i<size; i++, pix++, pImage++ )

*pix = (BYTE) (((double)*pImage));
}

void C****View::flushDisp(int nID)

{
CRect rc;

GetDlgItem(nID)->GetWindowRect(rc);

ScreenToClient(&rc);
InvalidateRect(&rc,FALSE);
//GetUpdateRect(&rc,FALSE);
}


返信引用
かーご
 かーご
(@かーご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

どうでしょうか?


返信引用
***
 ***
(@***)
ゲスト
結合: 22年前
投稿: 18
 

if (ar.IsStoring())
{
// TODO: この位置に保存用のコードを追加してください。
}
else
{
// TODO: この位置に読み込み用のコードを追加してください。
for ( int i=0;i<256;i++){
for( int j=0;j<256;j++ ){

char a[5];
ar.ReadString(a,5);

unsigned short n = atoi(a);
TRACE(%d ,n);
}
TRACE(\n);
}
}


返信引用
かーご
 かーご
(@かーご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

*** さん、動きません。実行はできますが、ファイル開かないです。


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

どこかにかいてあるのかも知れませんけど
「シリアライズ」にこだわる理由はなに?
ボタン操作のところにファイル読み込み処理つけたらどうなりますか?


返信引用
かーご
 かーご
(@かーご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

できるなら、それでもいいです・・
教えてください


返信引用
***
 ***
(@***)
ゲスト
結合: 22年前
投稿: 18
 

わたしはものの5分もかからずにできました


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

Serialize()を使わないなら、fopen(), fgets(), atoi(), fclose()を組み合わせるだけ
で行けると思います、というか確実に行けます。

これらの関数の使い方はご存じですよね? ご存じでなくても自力で調べる事はできますよね?


返信引用
かーご
 かーご
(@かーご)
ゲスト
結合: 22年前
投稿: 28
Topic starter  

どうやったんですか?*** さん
もうずっとやってるんですができません・・


返信引用
固定ページ 5 / 6

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました