こんにちは

pngからjpegに画像形式を変換するアプリケーション(C++で)を作成しようとしています。そしてウェブで検索してみると、http://www.personal-media.co.jp/tron/developer/d …というサイトが見つかりました。

BTRONというOSの中で使用するために作られたライブラリの解説のようなのですが、このライブラリの入手方法がよくわかりませんでした。わかる方教えていただけますでしょうか。
また、他にも手軽にpng→jpegへ変換するプログラムが作成できる方法をご存じの方教えてください。

よろしくお願いします。

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

A 回答 (3件)

 こんにちは。



 GDIplusとか。
 http://msdn.microsoft.com/en-us/library/ms533798 …

 D3DXLoadSurfaceFromFile()
 http://msdn.microsoft.com/ja-jp/library/bb172900(VS.85).aspx
 でロードして
 
 D3DXSaveSurfaceToFile()
 http://msdn.microsoft.com/ja-jp/library/bb205431(VS.85).aspx
 でセーブとか。

 VC以外の環境で使う場合はlibファイルの変換を行えば、動くとは思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
参考にさせていただきます。

お礼日時:2009/05/30 15:56

試してないから判らないけど、Windoesに「pngの表示コーデック」と「jpegの保存コーデック」がインストール済みなら「DIBを持つコンポーネントにLoadFromFileして、SaveToFileするだけ」で済んだりはしないだろうか?(試す環境が無いので試してないけど)



「だけ」とは言ったけど「jpeg保存コーデックに、保存時の圧縮パラメータなどをセットするようなラッパー」は必要になるだろうと予想されるので、純粋に「だけ」にはならないだろうけど。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
参考にさせていただきます。

お礼日時:2009/05/30 15:56

過去の質問に同様のものがありますが…。

(調べた?)

下記DLLを使ったらどうでしょ。
http://www.vector.co.jp/soft/dl/win95/prog/se222 …
というか、PNG形式とJPEG形式のフォーマットを調べて
自力でやっても問題ないと思いますが…。

C++といっても開発環境にもよりますよね。
VC++でMFCとかならCImageクラスを利用しても可能だろうし…。
http://msdn.microsoft.com/ja-jp/library/bwea7by5(VS.80).aspx
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
imgctlを使用させていただきました。ありがとうございます。

お礼日時:2009/05/30 15:57

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

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

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

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

QC言語のゲームのサンプルプログラムが置いてあって自由に修正できるサイト教えてもらえないでしょうか?

ゲームのサンプルプログラムが置いてあって自由に修正できるサイト教えてもらえないでしょうか?

Aベストアンサー

C言語、自体があまり初心者向けではないのですが、
Cを本気で学ぼうと考えるなら、書籍を購入する事をお勧めします。

「C言語〈1〉はじめてのCプログラミング プログラミング学習シリーズ」
倉 薫 (著)
アマゾン(http://www.amazon.co.jp/)の古本で400円で販売していました。
私が昔、他の人にC言語を教えるときに使った教材ですが非常に簡単でした。
「簡単」というのがポイントで初めてCを学ぶ方から非常に読みやすいと定評があった本です。

ただこれを読んだからといってすぐに市販されているようなゲームが作れるわけではありません。
C言語でゲームを作るのはかなり地道ですし下地になる知識が相当必要です。

とりあえず市販のコンパイラ(コンパイラというのはexe等を作るやつ)は
必要になってから買うので十分です。
先に説明した無償のコンパイラで市販レベルのソフトを作る事も可能なのです。
(市販のものと何が違うかというとマニュアル、ツール、ライブラリ等が付属している点)
やろうと思えばそのツールやライブラリもその無償のコンパイラで作れるわけですから。

また前回とかぶりますが
http://www.kumei.ne.jp/c_lang/bcc/index.html
でBCCというコンパイラをインストールし
http://www.kumei.ne.jp/c_lang/index_c.html
の1章から見ていって実際もexeにして実行してみてください。
このサイトも参考になります。

C言語、自体があまり初心者向けではないのですが、
Cを本気で学ぼうと考えるなら、書籍を購入する事をお勧めします。

「C言語〈1〉はじめてのCプログラミング プログラミング学習シリーズ」
倉 薫 (著)
アマゾン(http://www.amazon.co.jp/)の古本で400円で販売していました。
私が昔、他の人にC言語を教えるときに使った教材ですが非常に簡単でした。
「簡単」というのがポイントで初めてCを学ぶ方から非常に読みやすいと定評があった本です。

ただこれを読んだからといってすぐに市販されている...続きを読む

Qネイティブ ハンドルって...............

ネイティブ ハンドルってなんでしょうか?
ウィンドウ ハンドルを調べていたら出てきたのですが
調べてもわかりません
すいませんがどのようなものなのかお教え願えませんか?
よろしくお願い致します

Aベストアンサー

カテゴリ違いでは?
.NETですよね。

.NETでは、従来のウィンドウハンドルは基本的に使いません。
Windowsプラットフォームにネイティブなものだからネイティブハンドルと呼んでいるのでしょう。

QC言語・ゲーム作成で挫折気味の対処方法

こんばんは。ゲーム作成に関わらず、C言語で挫折気味の時、みなさんはどのように対処してきましたか?
以下、私の現在の状況を説明致します。

C言語でゲームを作成するという目的でC言語を勉強し、ゲーム作成の勉強をしていました。
C言語の書籍を一通り行い、DXライブラリを使用して、それに関するサイト(ゲームプログラミングの館等)を参考にしながらゲーム作成の勉強をしていました。
しかし、除々に分からなくなり、手がつけられなくなってしまいました。
ゲームを早く作成してみたいという気持ちが先走り、C言語の知恵が足りない(勉強期間:1ヶ月程度)のに
ゲーム作成に取り掛かろうとしたことがが原因のひとつだと思い、もう一度、C言語を勉強し直そうと考えています。
しかし、数ある書籍やサイトの中でどれがゲームプログラミングを学ぶのに適しているの分かりません。
みなさんがゲームプログラミングをするにあたって利用した書籍やサイトはどのようなものでしょうか?
また、同じようにC言語でゲームを作成している方にお聞きしたいのですが、C言語をどの程度勉強されてからゲーム作成に取り掛かったのでしょうか?

みなさんの意見を参考にして、勉強していきたいので、よろしければアドバイスをお願い致します。

こんばんは。ゲーム作成に関わらず、C言語で挫折気味の時、みなさんはどのように対処してきましたか?
以下、私の現在の状況を説明致します。

C言語でゲームを作成するという目的でC言語を勉強し、ゲーム作成の勉強をしていました。
C言語の書籍を一通り行い、DXライブラリを使用して、それに関するサイト(ゲームプログラミングの館等)を参考にしながらゲーム作成の勉強をしていました。
しかし、除々に分からなくなり、手がつけられなくなってしまいました。
ゲームを早く作成してみたいという気持ちが先...続きを読む

Aベストアンサー

私は、最初の頃は「SDL」を使って2Dゲームを作っていました。
その頃は、C言語は関数もあまり分かっていませんでした。
ですけど、勉強し直して「OpenGL」で3Dの簡単な動きなら動かせるようになりました。
今は作っていませんけど。

私が勉強に使った本を紹介します。
C言語の本
「図解C言語 ポインタの極意」
「新版 明解C言語 入門編」

C++言語の本
憂鬱なプログラマのためのオブジェクト指向開発講座

どのくらいC言語を理解しているか分かりませんけど、
分からないものが多く載っていて分かりやすい本を立ち読みをして、
探した方がいいと思います。

ゲームは2Dでしょうか?
それとも、3Dでしょうか?
3Dでしたら物理などが分からないと無理です。
物理の本(プログラムも載っています)
「ゲーム開発のための物理シミュレーション入門」

C++言語が分かれば、
「ゲームプログラマになる前に覚えておきたい技術」
がいいらしいです。

QGDL(GCC DEVELOPER LITE)のコンパイルについて

H8/3048Fマイコンのプログラミングをやりはじめた初心者です.
これから、秋月製のコンパイラ、アセンブラ、リンカではなくGDLを使用しようと思って、今日から使用し始めたのですが、GDLはリンクまでを一気に行ってしまうのですね。
例えば、A.c,B.c,C.cの三つのC言語ソースファイルをコンパイルして3つをリンクさせようとする場合はどのようにしたらよいでしょうか?
一つ一つコンパイルしてオブジェクトファイルを作成する方法がよくわかりません(マニュアルやヘルプの説明が短い・・・)。
3048Fマイコンを買ったときについてきたサンプルプログラムをコンパイル、リンクしようと考えてるのですが、そこでつまづいています.

3つのC言語ソースファイルを1つにしてやったらできましたが、.MOT形式の出力ファイルがもともと存在していたファイルとサイズがぜんぜん違っているので、何かおかしいのではないかと考えています.

何かわかることがありましたら、何でも良いので教えてください.

Aベストアンサー

GDLはあくまで簡易版みたいなので、複数のソースをリンクして扱うことが出来ません。
自分でgccのコマンドでコンパイル・リンクするか、makefileを作成してmakeしてやり必要があります。

>3つのC言語ソースファイルを1つにしてやったらできましたが、.MOT形式の出力ファイルがもともと存在していたファイルとサイズがぜんぜん違っているので、何かおかしいのではないかと考えています.
コンパイラやライブラリが違ったらファイルサイズが違うのは当たり前だと思いますが。
そのプログラムが動けば問題ないと思いますよ。

QC言語でプログラムを再起動

 UNIXで動くC言語のプログラムを作っています。
 その際、プログラムを再起動させたい時があります。
 しかし、C言語でプログラムを再起動させるってどうやればいいのかよくわかりません。
 何かよいやり方を知っている方、教えてください。
 よろしくお願いします。

Aベストアンサー

関数execl()を使えばよいと思います。
この関数は、fork()と組み合わせて、他のプログラムを
起動するのに使うのが普通ですが、
fork()せずにexecl()を呼ぶと、自プロセスを指定された
プログラムに置き換えます。ですので、ここで自分自身を
指定すれば、再起動したことになるはずです。

QBREGEXP.DLLをBCC Developerで使いたい

BREGEXP.DLLをBCC Developerで使いたいと思ったのですがプログラムのメイク時にendpとstartpはbregexpのメンバではない、BRegFree関数が見つからないなど多数エラーが出てしまいました。
設定は、インクルードパスにBREGEXPのフォルダを指定し、その他オプションにも「-LBREGEXP.DLLが入ってるフォルダ」とBREGEXPのフォルダを指定しました。
ライブラリファイルの指定にはBREGEXP.LIBを指定しましたが、指定してもしなくてもエラーメッセージは変わりませんでした。
設定がおかしいのでしょうか?
というかそもそもbccでBREGEXP.DLLは使えるのでしょうか?
誰かご享受願います。。。

Aベストアンサー

bccのコンパイラと一緒に配布されているツールの中に、
implib.exe というのがあると思いますが、これを使えば.dllファイルから
bcc用の.libファイルを作ることができます。

Pure Data の external を Borland C++ 5.5 で コンパイルする
http://nul.jp/2002/pd_bc

「DLL」の検索結果 - MEMO:はてな支店
http://d.hatena.ne.jp/katona/searchdiary?word=DLL

この辺に使用例がありますので参考にしてください。

> あとまだまだ初心者なものでDLLとLIBファイルの理解が曖昧なのですが、
> DLLはどのプログラムからでも読み込めるけど、LIBファイルは
> OBJファイルの集まりらしいので
> (​ http://m--takahashi.com/bbs/pastlog/a6700/A6655.html)​
> コンパイラに依存する、ということでよろしいのでしょうか?

おおむねそのような理解でいいと思います。
.obj自体の形式もvcとbccでは違ったりしますが。

>BREGEXPのフォルダのパスは C:\BCCDev\lib\bregexp です。
>そこにBREGEXP.DLL、BREGEXP.LIBなどが入っていて、
>-LC:\BCCDev\lib\bregexp
>-IC:\BCCDev\lib\bregexp
>と設定しました。

bregexp.dllに関しては、プログラムを実行するときにプログラムから
参照できないといけないので、実行ファイル(.exe)と同じ場所に置くか
PATH環境変数に登録されているディレクトリに置くなどしてください。

Vistaだとさらに手間がかかる可能性がありますがまずはこれくらいで。

bccのコンパイラと一緒に配布されているツールの中に、
implib.exe というのがあると思いますが、これを使えば.dllファイルから
bcc用の.libファイルを作ることができます。

Pure Data の external を Borland C++ 5.5 で コンパイルする
http://nul.jp/2002/pd_bc

「DLL」の検索結果 - MEMO:はてな支店
http://d.hatena.ne.jp/katona/searchdiary?word=DLL

この辺に使用例がありますので参考にしてください。

> あとまだまだ初心者なものでDLLとLIBファイルの理解が曖昧なのですが、
> DLLはど...続きを読む

QC言語でゲーム作り

フリーゲームに影響され、自分も作ってみたいと思いC言語勉強し始めました
趣味の範囲で、こつこつ頑張っていこうと思ってます

今現在、C言語の初初心者向けの本を一通り読み終えて次の本を読んでます
一応、一つの目標としてアクションゲーム(マリオみたいな)を作りたいんですが
C言語の他にどんなこと勉強すればいいでしょうか?

あと、C言語から次のステップに移るときは
やはり上級者向けの本は理解できるくらいまで頑張ってからでしょうか?

Aベストアンサー

とりあえずCだけではなく、C++まで一通り学習することをお勧めします。
PCゲームなのかどうか、Windows上のものなのかどうかわかりませんが、C/C++系の場合は、C++使っていることが多いので、C++知っているのと知らないのとでは、サンプルだとかライブラリとか理解できないかもしれないので。

仮にWindowsアプリだとして、API叩いてGDIで描画するか、DirectXを使うかというところもありますね。
2Dの横スクロールならGDIでも可能でしょうけど、後々のことを考えるとDirectX使えるように勉強したほうが、楽だしいろいろなことができるようになります。
DirectXはC++なので、やはりC++になります。

ちょっと戻ってしまいますが、Windowsアプリを作るのであれば、CやC++言語だけではだめで、WindowsAPIを使う必要があります。
まぁ一種のライブラリだと思えばよいですけど。

とりあえず、C/C++の入門書を一通りみて、どのような文法や制約などがあるか理解し(覚えなくてOK)、実際のサンプルソースなどをいじったり改良したりして実際の動作を見ていくのがよろしいかと。
コンソールでのC/C++がある程度わかってきたら、WindowsAPIやDirectXなどの入門書を見ていくといいのではないかとおもいます

とりあえずCだけではなく、C++まで一通り学習することをお勧めします。
PCゲームなのかどうか、Windows上のものなのかどうかわかりませんが、C/C++系の場合は、C++使っていることが多いので、C++知っているのと知らないのとでは、サンプルだとかライブラリとか理解できないかもしれないので。

仮にWindowsアプリだとして、API叩いてGDIで描画するか、DirectXを使うかというところもありますね。
2Dの横スクロールならGDIでも可能でしょうけど、後々のことを考えるとDirectX使えるように勉強したほうが、楽だ...続きを読む

Qhttp://www.***.com/goo.htm(仮)

のページを見るために
#include <string>
#include <fstream>
using namespace std;

WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
ofstreamofs;
string html,file;

file="c:\\gomi.url";
ofs.open(file.c_str());
if(ofs.is_open())
{
html="[InternetShortcut]\n;
html+="URL=http://www.***.com/goo.htm\n";
ofs<<html;
ofs.close();
ShellExecute(NULL,"open",file.c_str(),NULL,NULL,SW_SHOWMAXIMIZED);
}
return 0;
}
としてgomi.urlにurlフォーマットのアドレスを書き込んでそれを開くことによってできますがもっと直接的にアプリで
http://www.***.com/goo.htm
を見る方法を教えてください

のページを見るために
#include <string>
#include <fstream>
using namespace std;

WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
ofstreamofs;
string html,file;

file="c:\\gomi.url";
ofs.open(file.c_str());
if(ofs.is_open())
{
html="[InternetShortcut]\n;
html+="URL=http://www.***.com/goo.htm\n";
ofs<<html;
ofs.close();
ShellExecute(NULL,"open",file.c_str(),NULL,NULL,SW_SHOWMAXIMIZED);
}
return 0;
}
としてgomi.urlにurlフォーマットのアドレスを書き込ん...続きを読む

Aベストアンサー

ShellExecute や CreateProcess で、ファイル名の代わりに URL を指定するとブラウザが開きます。

QC言語のプログラム集

こんにちは。C言語のテキストにはプログラムとその説明が書いていますが、
このC言語のプログラムが多くのっているような本はありますか?本屋さんで探したのですが、プログラムがものすごく多くのっているようなものがなかったので、もしお分かりの方がおられましたが、本の紹介をお願いします。

Aベストアンサー

C言語ということでどうしても古い本になってしまいますが
下記URLのような本はどうでしょうか。
http://oku.edu.mie-u.ac.jp/~okumura/algo/
http://www.amazon.co.jp/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A1%E3%83%AA%E3%82%AB%E3%83%AB%E3%83%AC%E3%82%B7%E3%83%94%E3%83%BB%E3%82%A4%E3%83%B3%E3%83%BB%E3%82%B7%E3%83%BC-%E6%97%A5%E6%9C%AC%E8%AA%9E%E7%89%88%E2%80%95C%E8%A8%80%E8%AA%9E%E3%81%AB%E3%82%88%E3%82%8B%E6%95%B0%E5%80%A4%E8%A8%88%E7%AE%97%E3%81%AE%E3%83%AC%E3%82%B7%E3%83%94-William-H-Press/dp/4874085601

ご参考になれば幸いです。

Qhttp://csharpimage.blog60.fc2.com/b

http://csharpimage.blog60.fc2.com/blog-entry-19.html
をみて、直線補間をC言語で記述したのですが、結果が思う様にいきません。(_____)
プログラムは以下です。間違っているのは、おそらく、座標を示すところだとはおもっているのですが、
そこをどうすればいいのか。。。。レベルが低くてごめんなさい(>_<
どなたかご教授願います。
FILE *fpt;
_wfopen_s(&fpt,Common_Data_Raw->filename,L"rb");
FILE *fpt_output;
int width=Common_Data_Raw->width;
int height=Common_Data_Raw->height;
// 拡大縮小後の画像サイズ
int hxSize=Common_Data_Raw->width_rescale;//拡大、縮小後の幅が入っている
int hySize=Common_Data_Raw->height_rescale;//拡大、縮小後の高さが入っている。
// 拡大縮小用
int xSize=width;
int ySize=height;
double xpos, ypos;
double hokanX = (double)(xSize - 1) / hxSize;
double hokanY = (double)(ySize - 1) / hySize;
int i,j;
unsigned char **layer,**bufdata,**rescale;
//メモリの確保→省略します。

if ((xSize < hxSize)&&(ySize<hySize))
{
// X方向の補間
for (i=0;i<ySize;i++)
{
xpos = 0.0;
for (j = 0; j < hxSize; j+=3)
{
bufdata[i][j] = (unsigned char)(((double)layer[i][(int)xpos + 1] - (double)layer[i][(int)xpos]) *(xpos - (int)xpos) +(double)layer[i][(int)xpos]);
bufdata[i][j+1] = (unsigned char)(((double)layer[i][(int)xpos + 1+1] - (double)layer[i][(int)xpos+1]) *(xpos - (int)xpos) +(double)layer[i][(int)xpos+1]);
bufdata[i][j+2] = (unsigned char)(((double)layer[i][(int)xpos + 1+2] - (double)layer[i][(int)xpos+2]) *(xpos - (int)xpos) +(double)layer[i][(int)xpos+2]);
xpos += hokanX;}
}

// Y方向の補間
for (i = 0; i < hxSize; i+=3)
{ypos = 0.0;for (j = 0; j <hySize; j++)
{rescale[j][i] = (unsigned char)(((double)bufdata[(int)ypos + 1][i] - (double)bufdata[(int)ypos][i]) *(ypos - (int)ypos) +
(double)bufdata[(int)ypos][i]);rescale[j][i+1] = (unsigned char)(((double)bufdata[(int)ypos + 1][i+1] - (double)bufdata[(int)ypos][i+1]) *(ypos - (int)ypos) + (double)bufdata[(int)ypos][i+1]);
rescale[j][i+2] = (unsigned char)(((double)bufdata[(int)ypos + 1][i+2] - (double)bufdata[(int)ypos][i+2]) * (ypos - (int)ypos) + (double)bufdata[(int)ypos][i+2]);
ypos += hokanY;}}
}
else
{
//rescaledata = SimpleRescaleImage(data, hxSize, hySize);

http://csharpimage.blog60.fc2.com/blog-entry-19.html
をみて、直線補間をC言語で記述したのですが、結果が思う様にいきません。(_____)
プログラムは以下です。間違っているのは、おそらく、座標を示すところだとはおもっているのですが、
そこをどうすればいいのか。。。。レベルが低くてごめんなさい(>_<
どなたかご教授願います。
FILE *fpt;
_wfopen_s(&fpt,Common_Data_Raw->filename,L"rb");
FILE *fpt_output;
int width=Common_Data_Raw->width;
int height=Common_Data_Raw->height;
// 拡大縮小...続きを読む

Aベストアンサー

xposの計算がデータ構造に合っていないのだと思われます。
一つの座標に対して、配列layerは3要素 (RGBでしょうか) を使っていますよね。たとえばlayer[i][12], layer[i][13], layer[i][14]で一組です。
xposとhokanXの計算はこのことを考慮していないように見えるので、xposの値が途中14.2になったりするとlayer[i][14], layer[i][15], layer[i][16]を組にしてアクセスします。これでは思うような結果が得られなくて当然です。
さらに、隣の座標をアクセスするのにlayer[i][(int)xpos+1+α]としている部分はlayer[i][(int)xpos+3+α]でなくてはいけないはずです。

データ構造を変えていいのであれば、layer[i][j], layer[i][j+1], layer[i][j+2]のような形ではなく、構造体の二重配列にしてlayer[i][j].r, layer[i][j].g, layer[i][j].bのようにアクセスすれば簡単になります。bufdataとrescaleも同様に。

xposの計算がデータ構造に合っていないのだと思われます。
一つの座標に対して、配列layerは3要素 (RGBでしょうか) を使っていますよね。たとえばlayer[i][12], layer[i][13], layer[i][14]で一組です。
xposとhokanXの計算はこのことを考慮していないように見えるので、xposの値が途中14.2になったりするとlayer[i][14], layer[i][15], layer[i][16]を組にしてアクセスします。これでは思うような結果が得られなくて当然です。
さらに、隣の座標をアクセスするのにlayer[i][(int)xpos+1+α]としている部分はlayer[...続きを読む


人気Q&Aランキング