Win32上で圧縮形式の画像データを読み込む方法を御存知の方いらっしゃいますか? 無知なもので、bmp形式のイメージ読み込みしかできないんです。LoadImage関数みたいに一発で読める関数があればラクですけど、面倒な方法でも構わないので知ってる人いたらお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

こんな感じでしょうか?>参考URL


もしくは
http://www.k-work.co.jp/jpegbook.html
http://www.intel.co.jp/jp/developer/support/perf …
この辺をあたってみたらいかがでしょう?
最近は JPEG-2000 という新しいフォーマットもできつつあるようですね。現行のフォーマットとの互換性は無いらしいですが、今まで以上に圧縮が可能で、かつ画質は良い、理論上ブロックノイズは出ないというかなり期待のものです。

GIFは個人でやるのは「もう」やめた方が良いですね。

参考URL:http://www.sfc.keio.ac.jp/~akimichi/computer/jpeg/
    • good
    • 0
この回答へのお礼

おおおぉぉ!!
教えて頂いたULR、私の要望にズバッとはまっております。感謝!!
書籍については 必ずや購入しようかと。
なにしろ画像ファイル内部の構造に関する知識が
少ない少ない(BMP形式しか知らない‥‥)
その手法を実際に使うかどうかは、まだ怪しいん
ですけど 貪欲に覚えにゃならないことが多いので。

非常に助かります ありがとうございました。

お礼日時:-0001/11/30 00:00

画像ビュアでSUSIEという有名ソフトがあります。


このソフトは画像ローダなどをプラグインとして実装しています。
このプラグインを使ってロードしてはいかがでしょうか。
そのようなソフトは世間にたくさん存在しています。
まずSUSIEのサイトを検索して、そこのリンクをたどると、
プラグインを利用するサンプルがあります。
たぶん、カナさんという方へのリンクだと思います。
手がかりにはなるでしょう。

ちなみにSUSIEも以前はGIFに対応していました。
そのため古い付録CDを探せば、
GIFのプラグインも収録されていると思います。
なお、プラグインはVCからでもVBからでも使えます。

この回答への補足

しかしど~にも、自分でコード構築しないと納得いきそうになかったりする(爆)
ヘンなとこで自力本願(?)だな‥‥
そんわけで そっちの手法わかる人、切にお願いします。

補足日時:2000/12/06 02:12
    • good
    • 0
この回答へのお礼

ありがとうございます、早速情報を参考に検索してみますね(笑)

お礼日時:-0001/11/30 00:00

ああ、言い忘れましたがGIFはダメです。


GIFは特許上の問題で、ただでは使えなくなっています。
    • good
    • 0

基本的にはWin32APIに用意されてるものではないです。


ですから自分でデコードルーチンを書かないとなりません。
楽するなら、DLLを使えばいいと思います。
フリーのものでは、下記Vectorのサイトなど探せばあるでしょう。
最近はブラウザなどで当たり前にJPEGやGIFの表示が出来ますので
多分Windowsにも標準のDLLがあると思いますけど、
手もとのMSDN検索したらCD入れろと言われて探すのが
面倒なので、どうぞやってみてください(笑

DLLでも面倒なら、COMオブジェクトを使うって手もあります。

参考URL:http://www.vector.co.jp/soft/win95/prog/se148530 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ええと、自分はVC++使ってるんでVBのコードだと
無理かも知れないです(汗) 一応VectorからDLLをDL
しましたが、TransG32は既にマシンに入ってました。
デコードルーチン書きたいけど手法がどうにもわからんです。

コードでカバーするくらいは然程手間とも思わないんで、
関連書籍や何かあったら教えていただけませんか?
それとCのソースで参照できるのがあったらメールに
添付で送ってもらえると非常に助かります。
他力本願だな~(笑)
ヘボい質問ですまんです。ファイルの仕様って知らない事多くて‥‥まだまだお勉強せないかんですな。

お礼日時:-0001/11/30 00:00

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q画像を表示するには

C言語をおぼえたてなんですが
文字はprintfで表示するやり方がわかるんですが
画像はどのように表示するのでしょうか?

Aベストアンサー

★アドバイス
・コンソール・アプリケーションでは画像を出せません。
 C言語でも命令(関数)が存在しません。
 画像を表示するには GUI アプリケーションで作る必要があります。
>C言語をおぼえたてなんですが
 ↑
 画像を出す(描画)するにはまだまだ時間が掛かりそうですね。
 でもミニゲームとしてなら次のリンクをどうぞ。
 (1)http://www.nhk.or.tv/kow/program/index.php→『テトリスの作り方』
 コンソール・アプリケーションでも文字を利用してテトリスが作れるようです。
・あと画像を使った場合は GUI アプリケーションになりますが、こちらは次のサイトを
 参考にして下さい。サンプル・ソースをダウンロードできます。
 (2)http://codezine.jp/a/article/aid/207.aspx→『落ち物ゲームの作り方 第1回:「TETRA」編』
 (3)http://codezine.jp/a/article/aid/228.aspx→『落ち物ゲームの作り方 第2回:「聖夜の落とし物」編』
 ダウンロードしてソースファイルを見て下さい。
 C言語ですが知らないような関数名がたくさん使われています。
 これは Win32 API の関数群です。C言語の標準関数とは別の種類です。
 Windows OS では内部はすべて Win32 API を使って処理されています。
 公開されている関数以外にも非公開関数もあります。まぁ、当然かな。
・今後のために GUI アプリケーションのサイトと本を紹介します。
 お決まりですが下のサイトを参考にして下さい。
 http://www.kumei.ne.jp/c_lang/→『猫でもわかるプログラミング』SDK編を読むこと。
 http://wisdom.sakura.ne.jp/system/winapi/→『Win32 API入門』本もお勧め。
 http://www.geocities.jp/ky_webid/win32c/index.html→『Win32API(C言語)編』お勉強サイトです。
・以上。

参考URL:http://www.amazon.co.jp/dp/4797333332/

★アドバイス
・コンソール・アプリケーションでは画像を出せません。
 C言語でも命令(関数)が存在しません。
 画像を表示するには GUI アプリケーションで作る必要があります。
>C言語をおぼえたてなんですが
 ↑
 画像を出す(描画)するにはまだまだ時間が掛かりそうですね。
 でもミニゲームとしてなら次のリンクをどうぞ。
 (1)http://www.nhk.or.tv/kow/program/index.php→『テトリスの作り方』
 コンソール・アプリケーションでも文字を利用してテトリスが作れるようです。
・あと画像を使...続きを読む

QC言語で画像処理

C言語で画像処理をしたいのですが、元となる画像の形式は何がよいのでしょうか?BMP,GIF,JPEG,PNG,などいろいろな形式がありますよね。一般的には画像処理プログラミングをするときに、どの形式の画像を用いるのでしょうか?
また、その画像の読み込み方がわかりません。C言語は入門書を一通りやってみた程度で、画像処理のプログラミングの仕方がわかりません。
初心者なものでよろしくお願いします。

Aベストアンサー

画像処理と言っても様々な種類があります。

動画、静止画。
静止画の中でもベクトル画像かラスタ画像かで扱いは違います。
比較的取り扱いの容易なラスタ画像であっても2値画像(白黒)、グレースケース画像、インデックス画像、ハイカラー/フルカラー画像では違いがあります。
さらに、フルカラーラスタ画像にはインターリーブ形式とプレーンマップ形式があります。
そして、その上RGB、CMY,CMYKなどの色表現形式の違い。
最後に画像データを納めるファイルフォーマットの違いがあり、ファイルフォーマットごとに付加機能(透過、プログレッシブ、圧縮など)があります。

処理内容によって向いている画像形式と向いていない画像形式があります。
たとえば「RGB各要素ごとに近傍画素の平均を取る」という処理はプレーンマップ形式よりインターリーブ形式の方が扱いやすい。

専門学校で画像処理プログラミングを教えていたときには「Adobe Photoshop Plug-in」を題材にしていました。
理由は
・ファイルフォーマット、ファイルが持つ機能を気にしなくて良い
フィルタプラグインの処理対象は「ウィンドウに表示された画像の選択部分」なので、ファイルやデバイスなどの「画像処理の本質でない部分」を無視できます。

・処理対象とする画像を細かく指定することが出来る
「RGB24bit画像しか相手にしない!」とか「フルカラー画像なら全部サポート」などと言った指定が可能で、対応していない画像についてはPhotoshopがフィルタメニュー上で「対象外」であることを示してくれます。

・ユーザインタフェースはPhotoshopが代行してくれる
画像全体を対象にする処理ばかりではありません。
処理対象範囲の指定など、「画像処理の本質」でない部分をPhotoshopに任せることが出来ます。
Photoshopは適切なマスク処理を接してくれるので、プラグインは細かいことを気にしないで処理に専念できます。
自分でマスク処理をしたいときは、「勝手にマスク処理をするな!」と要求することも出来ます。

・インターリーブ形式、プレーンマップ形式を指定することが出来る
処理アルゴリズム的に「画像データはインターリーブ形式が都合がいい」とか「どうしてもプレーンマップ形式じゃないとダメ」と言う場合、Photoshopに欲しい画像の形式を要求しておくと、要求された形式に変換してくれます。

つまり「余計なことはいっさい考えなくていい」というすばらしい環境です。
Photoshopを持っていなくても、Photoshop Plug-in Interface互換のPlug-inインターフェースを持つ画像処理アプリケーション(Paint Shop Proなど)でもPhotoshop Plug-inは使うことが出来ます。
Photoshop SDK(プラグインを作るための解説、ライブラリ、サンプル集)はPhotosop6.5対応までの物なら無償でAdobeのWebサイトから入手できます(解説は全て英語)。
Photoshop7対応の日本語版Photoshop SDKは有償(めっちゃ高い!)です。

chaborinさんは興味のある分野に関して深く探求される方だと感じましたので、わざと専門用語だらけにしました。
画像処理技術者としてはこの程度の知識は必須なので頑張って調べてください。

最後にどうしてもファイルから処理したい場合について…

BMP形式はWindowsのDIBを理解していないとキツイです。
画像が上下逆さまに入ってたたり、色表現範囲に不条理な制限があったり。
Win32APIの勉強としてならBMPでもいいと思いますが、私ならTIFFを対象にします。
データ並び、圧縮方法、画像フォーマット(インターリーブ、プレーンマップ)、色表現形式(RGB,CMYなど)などの要素の勉強には各要素ごとにTAGが用意されているTIFFが最適です。
次の候補はPNGかな。

Win32APIを学ぶのではなく、画像処置を学ぶのならTIFFかPNGが最適でしょう。
JPEGもライセンス問題があるので、今から勉強するならGIF(ライセンス期限が迫っている)の方がいいと思います。

画像処理と言っても様々な種類があります。

動画、静止画。
静止画の中でもベクトル画像かラスタ画像かで扱いは違います。
比較的取り扱いの容易なラスタ画像であっても2値画像(白黒)、グレースケース画像、インデックス画像、ハイカラー/フルカラー画像では違いがあります。
さらに、フルカラーラスタ画像にはインターリーブ形式とプレーンマップ形式があります。
そして、その上RGB、CMY,CMYKなどの色表現形式の違い。
最後に画像データを納めるファイルフォーマットの違いがあり、ファ...続きを読む

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

QC言語プログラムを用いた画像表示プログラム

おはようございます。

お時間ありましたら、ご教授よろしくお願いいたします。

C言語を使って、画像の表示、画像の処理ができるプログラムを作成したいのですが、私自身、JAVAを少しかじった程度の知識しかなくなかなかうまくいきません。

やっかいなことに、ただ画像を表示させるだけでなく、JPEGライブラリを用いた(JPEG画像を読み込んで処理できる)C言語プログラムのプログラムを作成したいのですがうまくいかずご質問させていただきました。

参照できるサイト、ご自信の作られたプログラム、プログラムを経験されている方の記述など教えていただければ幸いです。

明確な質問ではないのでご回答が非常に難しいと思いますが、よろしくお願いいたします。

早朝からお忙しいと思いますが、お時間がありましたら是非ご教授よろしくおねがいします。

Aベストアンサー

私のホームページにお絵かきソフトがあり、ソースを公開しています。
全体で2万行程度で、そのうち9割は汎用モジュールです。
ウィンドウ周りの処理はC++を使用していますが、
ほとんどの部分はCで書いてあります。
よろしければご参照ください。

参考URL:http://www.fiberbit.net/user/mobf5f2/program.html

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

Qビットマップ画像を読み込むプログラムがうまく行きません。困ってます…。

こんにちは。大学4年のyu-tinと申します。
現在、大学の研究で使用するためのプログラムとして、以下の機能を持ったプログラム作りに取り込んでいます。

1)ビットマップ画像(グレースケール、縦480×横640pixel)を読み込み、
 その画像の1つ1つの画素の輝度値を表示させる
2)読み込んだビットマップ画像を出力させる

しかし、作成したプログラムがうまく行きません。以下の3つの問題が発生しています。

a)0行0列~1行383列までの画素値がおかしい。
 (0,0,0,0,1,1,1,0,2,2,2,0,3,3,3,0,…,254,0,255,255,255,0 となっている)
b)出力した画像の最上部2行程度に、細くて黒い線が表示される。
 (読み込んだ画像と全く同じ画像を出力させたい)
c)出力した画像が、”ディスクエラー”によりPhotoshopで開けない。
 (ペイントでは開ける)

その問題のプログラムは、以下の通りです。
しかし、このプログラムは、他人のプログラムに改良を加えて作成したものです。なので、このプログラム自体、私自身が完璧に理解できていない状況です。

私は、プログラミングに関しては初心者に近いので、丁寧に教えて頂けると大変助かります。
研究が先に進まず、大変困っています…。みなさま、本当に、本当によろしくお願い致します。



//ビットマップ画像に関するプログラム。
//画像の表示と輝度値の表示を行う。

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>

#define X_SIZE 640  //画像の横幅(ピクセル数)
#define Y_SIZE 480  //画像の縦幅(ピクセル数)
#define Z_SIZE 1    //1つの画素に含まれる色の数

void *malloc(size_t size);

void main(void)
{
 int i, j, k;   //ループ用変数 i…縦の画素用, j…横の画素用, k…色数用
 int x=0;    //画像の横幅(ピクセル数)*/
 int y=0;     //画像の縦幅(ピクセル数)
 FILE *fp;

/***********元画像データのメモリ確保*********/
 BYTE ***mae;
 mae=(BYTE ***)malloc(sizeof(BYTE **)*Y_SIZE);
 for(i = 0; i < Y_SIZE; i++){
  mae[i]=(BYTE **)malloc(sizeof(BYTE *)*X_SIZE);
 }
 for(i = 0; i < Y_SIZE; i++){
  for(j = 0; j < X_SIZE; j++){
   mae[i][j]=(BYTE *)malloc(sizeof(BYTE)*Z_SIZE);
  }
 }

/*******画像の読み込み・輝度値の表示*******/
 fp=fopen("sample1.bmp","rb");   //画像”sample1”を開く

 BITMAPFILEHEADER bmfh;
 BITMAPINFOHEADER bmih;

 fread(&bmfh,sizeof(bmfh),1,fp);
 fread(&bmih,sizeof(bmih),1,fp);

 x=bmih.biWidth;  //インフォヘッダに含まれる画像の幅情報をxに代入
 y=bmih.biHeight;  //インフォヘッダに含まれる画像の高さ情報をyに代入

 for(i = 0; i < y ;i++){
  for(j = 0; j < x; j++){
   fread(&mae[i][j][0],sizeof(BYTE),1,fp);
   if(i<640 && j<480)printf("%d, %d, %d\n",i, j, mae[i][j][0]);   //輝度値を表示
  }
 }
 fclose(fp);

/**************画像の表示*************/
 //画像”sample1”を”sample2”という名前で出力する
 fp = fopen("sample2.bmp" ,"wb");

 //ヘッダの書き込み
 fwrite(&bmfh,sizeof(bmfh),1,fp);
 fwrite(&bmih,sizeof(bmih),1,fp);

 for(i = 0; i < bmih.biHeight; i++){
  for(j = 0; j < bmih.biWidth; j++){
   fwrite(&mae[i][j][0],sizeof(BYTE),1,fp);
  }
 }
 fclose(fp);  //ファイルをクローズ

}

こんにちは。大学4年のyu-tinと申します。
現在、大学の研究で使用するためのプログラムとして、以下の機能を持ったプログラム作りに取り込んでいます。

1)ビットマップ画像(グレースケール、縦480×横640pixel)を読み込み、
 その画像の1つ1つの画素の輝度値を表示させる
2)読み込んだビットマップ画像を出力させる

しかし、作成したプログラムがうまく行きません。以下の3つの問題が発生しています。

a)0行0列~1行383列までの画素値がおかしい。
 (0,0,0,0,1,1,1,0,2,2,2,0,3...続きを読む

Aベストアンサー

ビットマップファイルにはビット深度が24ビット未満の場合
このファイルで使用されるパレットが登録されています
BITMAPINFOHEADER と 実際のビットイメージの間に
RGBA*何色といったパレットが存在します
グレースケールの8bitなら256個です
何個あるかは BITMAPINFOHEADERのbiClrUsedがそれに当ります
これが0ならbiBitCountをビットシフトして求めます
1 << biBitCountが個数になります
実際のバイトデータとしては
(1 << biBitCount) * sizeof(RGBQ) バイト存在します

したがって
BYTE* pPalette = (BYTE*)calloc( sizeof(RGBQ), (1 << biBitCount) );
とバッファを宣言して

fread(&bmih,sizeof(bmih),1,fp);
の後で
fread( pPalette, sizeof(RGBQ), (1 << biBitCount), fp );
を実行してから
色情報を取得しましょう

書き出すときも同じように
fwrite(&bmih,sizeof(bmih),1,fp);
の後で
fwrite( pPalette, sizeof(RGBQ), (1 << biBitCount), fp );
を実行します

あと動的に確保したバッファは使い終わったら free()で開放しましょう

return 0;の前に
 free( pPalette );
 for(i = 0; i < Y_SIZE; i++){
  for(j = 0; j < X_SIZE; j++){
   free(mae[i][j]);
  }
 }
 for(i = 0; i < Y_SIZE; i++){
  free(mae[i]);
 }
 free(mae);
といった具合に 逆順に開放していきます

ビットマップファイルにはビット深度が24ビット未満の場合
このファイルで使用されるパレットが登録されています
BITMAPINFOHEADER と 実際のビットイメージの間に
RGBA*何色といったパレットが存在します
グレースケールの8bitなら256個です
何個あるかは BITMAPINFOHEADERのbiClrUsedがそれに当ります
これが0ならbiBitCountをビットシフトして求めます
1 << biBitCountが個数になります
実際のバイトデータとしては
(1 << biBitCount) * sizeof(RGBQ) バイト存在します

したがって
BYTE* pPalette...続きを読む

Q.jpgと.pngファイルを.bmpに変換したい

.jpgと.pngを.bmpに変換するプログラムを無償ボーランドC++5.5で作りたいのですが
.jpgと.pngのフォーマットについて詳しく説明しているサイトを教えてください

Aベストアンサー

↓ここなんかが最適かと思います。
http://www.amy.hi-ho.ne.jp/jbaba/image0.htm

あと定番どころといえば↓
http://www.wotsit.org/

参考URL:http://www.amy.hi-ho.ne.jp/jbaba/image0.htm

Qバイナリファイル(画像)のよみこみ

レポートで1024×1024ピクセルの画像を、間引いて256×256の画像にしろというのが出されました。画像はrawファイルです。
それで、とりあえず画像を読み込んで、出力するプログラムを書いてみたんですが、コンパイルは出来るのに実行すると不正な処理とけいこくがでてきてしまいます。
ソースは

#include<stdio.h>
main()
{
unsigned char in[1024][1024],out[1024][1024];
FILE *fp;
int i,j;
fp=fopen("aaa.raw","rb");
fread(in,sizeof(unsigned char),1024*1024,fp);
fclose(fp);
for(i=0;i<1024;i++){
for(j=0;j<1024;j++)
out[i][j]=in[i][j];
}
fp=fopen("bbb.raw","wb");
fwrite(out,sizeof(unsigned char),1024*1024,fp);
fclose(fp);
}
です。
どこがいけないのかアドバイスいただきたいです。よろしくお願いします。

レポートで1024×1024ピクセルの画像を、間引いて256×256の画像にしろというのが出されました。画像はrawファイルです。
それで、とりあえず画像を読み込んで、出力するプログラムを書いてみたんですが、コンパイルは出来るのに実行すると不正な処理とけいこくがでてきてしまいます。
ソースは

#include<stdio.h>
main()
{
unsigned char in[1024][1024],out[1024][1024];
FILE *fp;
int i,j;
fp=fopen("aaa.raw","rb");
fread(in,sizeof(unsigned char),1024*1024,fp);
fclose(fp);
for(i=0;i<1024;...続きを読む

Aベストアンサー

こんにちわ。
#2 のmuyoshid です。

取りあえず、もう少し小さい単位でread/write する方法のプログラムを
記載してますので、参考にしてみて下さい。
※ BUF_SZ の値を変更すると、read/write サイズを変更できます。

#include <stdio.h>
#define IN_FILE   "aaa.raw"
#define OUT_FILE  "bbb.raw"
#define BUF_SZ   8192    // Buffer Size
static int fcopy(FILE *, FILE *);

main()
{
  FILE  *rfp, *wfp;
  int   rinf;

  rfp = fopen(IN_FILE, "rb");
  if (((FILE *)NULL) == rfp) {
    printf("File \"%s\" cannot open.\n", IN_FILE);
    exit(-1);
  }
  wfp = fopen(OUT_FILE, "wb");
  if (((FILE *)NULL) == wfp) {
    printf("File \"%s\" cannot open.\n", OUT_FILE);
    exit(-1);
  }
  rinf = fcopy(rfp, wfp);
  fclose(rfp);
  fclose(wfp);
  printf("fcopy() = %d\n", rinf);
  exit(rinf);
}

static int
fcopy(FILE *rfp, FILE *wfp)
{
  unsigned char  in_buf[BUF_SZ], out_buf[BUF_SZ];
  int       rinf;

  while(!feof(rfp)) {
    rinf = fread((void *)in_buf, 1, BUF_SZ, rfp);
    if (rinf < 0) {
      printf("File read error.\n");
      return(-1);
    }
    memcpy((void *)out_buf, (void *)in_buf, BUF_SZ);
    rinf = fwrite((void *)out_buf, 1, rinf, wfp);
    if (rinf < 0) {
      printf("File write error.\n");
      return(-1);
    }
  }
  return(0);
}

こんにちわ。
#2 のmuyoshid です。

取りあえず、もう少し小さい単位でread/write する方法のプログラムを
記載してますので、参考にしてみて下さい。
※ BUF_SZ の値を変更すると、read/write サイズを変更できます。

#include <stdio.h>
#define IN_FILE   "aaa.raw"
#define OUT_FILE  "bbb.raw"
#define BUF_SZ   8192    // Buffer Size
static int fcopy(FILE *, FILE *);

main()
{
  FILE  *rfp, *wfp;
  int   rinf;

  rfp = fopen(IN_FILE, "rb");
  if...続きを読む

Q三角関数の記述の仕方

タイトルそのまんまなんですが、三角関数はC言語ではどのように記述すればいいでしょうか?
角度にラジアン表記でπ(パイ)を使いたいんですが、その表記方法もわかりません。
僕の持っている本に載ってなかったので質問させていただきました。
よろしくお願いします。

Aベストアンサー

C言語で三角関数を使うためには、math.h をインクルードする必要があります。使い方は例えば、こんな感じです。

#define M_PI 3.14159265358979 /* 円周率 */

double x, y, theta;

theta = M_PI / 4.0;
x = cos(theta); /* sin,cos,tanの引数は弧度法の角度です。*/
y = sin(theta);

πは上記の例のように自分で定義して使ってください。

Qint型からchar型への変換

タイトル通り、int型からchar型への変換の仕方がわかりません!><
どうしたらいいのでしょうか?

Aベストアンサー

#include <stdio.h>


char buf[5];
int no;

no = 10;
sprintf(buf, "%d", no);


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報