今、C言語でppmのP3形式の画像を書き換えるプログラムを作成しています。そこで、ppm形式の画像についての質問があります。
ppm形式では、#以降の記述はコメントとして読みとばすという決まりがありますが、これはヘッダ以外にも記述されるのでしょうか?例えば、
------
P3
150 250
100
15 15 15 15 15 15 15 15 15
15 15 15 15 15 15 15 15 15
#~~~
15 15 15 15 15 15 15 15 15
...
------
というように、画像データの途中にコメントが挿入されていることはあるのでしょうか?これがなければ、プログラムが簡単に書けるのですが・・・。
わかる人がいれば教えてください。よろしくお願いします。

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

A 回答 (2件)

どこに出現する可能性もあると言ったけど、


さすがにマジックナンバーより前には無いね。
先頭に有ってこそのものだし。


まあ、データの途中にコメント入れるPPM生成ソフトはそうそう無いとは思う。
PPMを読むソフトはデータ部のコメントをちゃんと無視するみたいだけど。
    • good
    • 0
この回答へのお礼

やはりどこにコメントがあっても、使用できるプログラムを作るのが良さそうですね。
回答ありがとうございました。

お礼日時:2009/05/28 22:52

http://netpbm.sourceforge.net/doc/ppm.html
http://netpbm.sourceforge.net/doc/pbm.html
ヘッダに限るなんてどこにも書いてないから
どこに出現する可能性もあると考えるべきでしょう。

#以降を無視するだけなんだから、そんな難しくないよ。
    • good
    • 0

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

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

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

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

Q日本国有鉄道SLの形式名について

いくつか国鉄のSLの形式名についてわかりません。

○C11 D51 C62etc.のようにアルファベットの次の数字は、十の位が1、5,6以外はないようですが、なぜでしょうか。

○96、86型については、なぜC、Dの形式名にしないのでしょうか?

Aベストアンサー

>○96、86型については、なぜC、Dの形式名にしないのでしょうか?

国鉄となる前の鉄道院の時代の1909年に車両形式称号規程が改められ、蒸気機関車は1~9999の4桁を使って形式が付与されるようになりました。

96(9600形)や86(8620形)はその頃に落成したので4桁の形式番号を持っています。

ところが、この当時は蒸気機関車の全盛期で新形式も次々と登場し、また私鉄を国有化した際に編入されて国鉄籍となった旧私鉄機関車にもそれぞれ形式番号を付与しており、4桁形式番号では行き詰まりが見えてきた為(それゆえC51形は18900形という5桁で登場した)、1929年に再び車両形式称号規程が改訂されて現在良く見るCやDを使った形式が使われるようになります。

ただ、この時4桁形式を全て新しい形式番号にしてしまうと非常に手間と費用(1台に4枚ある砲金製のナンバープレートを全車交換しなければならない)がかかること、(4桁番号の新形式化で)新形式番号がまたパンクしてしまうのでは称号規定を改定した意味がなくなること、製造年の古い(=廃車の近い)機関車にまで新しい形式を付与するのは無駄がでることなどから、この改訂時に旧形式から新形式に移ったのは、製造時期が新しい本線旅客用の18900形(C51形)、8200形(C52形)と、製造途中だった9900形(D50形)の3形式のみとなっています。


>○C11 D51 C62etc.のようにアルファベットの次の数字は、十の位が1、5,6以外はないようですが、なぜでしょうか。

上記した1929年の車両形式称号規程では、アルファベットが動軸数を表し、十の位の1~4がタンク機関車、5~9がテンダー機関車を表すようになっています(1の位はどれも0から始める)。

1930年頃には私鉄の国有化も一段落しており、また機関車製造や設計の技術も一定レベルに達していたため(以前は設計・製造技術が未熟だった為に少数輸入機も多く、これが多形式化の一因ともなっていた)、国鉄が設計・量産する機関車はその時点での要求性能を満たす標準機的なものとなっていて、以前ほど多くの形式が登場しなくなっています(その代わりに1形式の両数は昔と比較にならないくらいに増えた)。

また、形式が多いということは保守の手間(保守ノウハウや部品確保等)が増えるうえに、少数多形式は車両運用面でも面倒かつ様々な制約が出るため、形式をなるべく増やさないようにしていたというのもあるでしょう。

そのため、最終形式番号は、タンク機関車のC形はC12、E形はE10、テンダー機関車のC形はC63(ただし、C63は製造直前で計画中止)、D形がD62、と昔と比べると遥かに少ない形式数で終わっているのですね。

ここから余談。

C63を除く十の位が6の機関車は全て改造(もしくは改造名義)で登場したものです。

戦後、旅客輸送が飛躍的に伸びた際に旅客用機関車が必要となったのですが、その当時日本を統治下においていたGHQ(連合国軍最高司令官総司令部)が新しい機関車の製造を一切認めなかった為、窮余の策として、軍需輸送がなくなって余剰気味だったD形貨物機関車のボイラーを使用し、C形の足回りと組み合わせて改造扱いで旅客用機関車として登場したのがC61とC62です。

この2形式は、改造種車(ボイラー提供元)であるD51とD52の1の位を取って、それぞれC61とC62というように形式が付与されました(当時の最終形式はC59だったが、この理由によりC60が飛ばされてC61とC62に付番された)。

また、東海道、山陽のような重幹線へのC62の配置と電化により、余剰となった重幹線専用機C59を地方幹線で使えるように軸重軽減改造を行なったものがC60です。(C61、C62登場時に飛ばされた60の番号を使用した)

電化の進展によって幹線の蒸気機関車が余剰となるのは貨物用機関車も同様で、これらは地方線区で老朽化が進んでいた9600形等の置換え用として軸重軽減化改造が施され、D50、D51、D52形がそれぞれD60、D61、D62という新形式で登場しています。

>○96、86型については、なぜC、Dの形式名にしないのでしょうか?

国鉄となる前の鉄道院の時代の1909年に車両形式称号規程が改められ、蒸気機関車は1~9999の4桁を使って形式が付与されるようになりました。

96(9600形)や86(8620形)はその頃に落成したので4桁の形式番号を持っています。

ところが、この当時は蒸気機関車の全盛期で新形式も次々と登場し、また私鉄を国有化した際に編入されて国鉄籍となった旧私鉄機関車にもそれぞれ形式番号を付与しており、4桁形式番号では行き詰まりが見え...続きを読む

QC#を勉強中でC#で壁紙を変更するプログラムを作ろうと考えています。

C#を勉強中でC#で壁紙を変更するプログラムを作ろうと考えています。
ネットで調べてSystemParametersInfoを使うというとこまではわかったのですが実際にどう使えばいいかわかりません。
教えてください。

Aベストアンサー

 こんばんは。

 P/InvokeでもってSystemParametersInfo()APIを呼び出さないといけません。
 詳しくは以下URLを参照してください。
 http://msdn.microsoft.com/ja-jp/library/aa288468(VS.71).aspx

 以下はFormLoadイベント内で壁紙を変えます。
 壁紙ファイルを置くディレクトリ位置に応じて、適切にパスを変えてください。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
const uint SPI_SETDESKWALLPAPER = 20;
const uint SPIF_UPDATEINIFILE = 1;
const uint SPIF_SENDWININICHANGE = 2;

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool SystemParametersInfo(uint uiAction, uint uiParam, StringBuilder pvParam, uint fWinIni);

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
//壁紙のパス
StringBuilder sb = new StringBuilder("c:\\paper.bmp");

//壁紙を変える
SystemParametersInfo(SPI_SETDESKWALLPAPER, (uint)sb.Length, sb, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
}
}
}

 こんばんは。

 P/InvokeでもってSystemParametersInfo()APIを呼び出さないといけません。
 詳しくは以下URLを参照してください。
 http://msdn.microsoft.com/ja-jp/library/aa288468(VS.71).aspx

 以下はFormLoadイベント内で壁紙を変えます。
 壁紙ファイルを置くディレクトリ位置に応じて、適切にパスを変えてください。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.T...続きを読む

Qこの鉄道車両の形式はなんでしょうか?

nikkeiBPnet on Yahoo!ニュースの第82回「東北縦貫線が着工」の記事のバナーにあるJR車両?の形式が分かるかた、お教えください。
↓アドレスです。
http://event.media.yahoo.co.jp/nikkeibp/archives.html

Aベストアンサー

CGだと思うので実在する車両かどうかはわかりませんが、ぱっと見では205系っぽい。
塗装は川越線のものに近いですが、幅が違いますね…。

参考URL:http://www.uraken.net/rail/alltrain/uratetsu205.html

QC言語のプログラムで#includeを使わず#includeだけで

C言語のプログラムで#include<math.h>を使わず#include<stdio.h>だけで√(sqrt)を表現することは可能でしょうか?

Aベストアンサー

ご自分で sqrt 関数を作れば可能です。
こんな感じでしょうか。

#include <stdio.h>

static double
sqrt (double s)
{
 double x = s / 2.0;
 double last_x = 0.0;

 while (x != last_x)
 {
  last_x = x;
  x = (x + s / x) / 2.0;
 }

 return (x);
}

int
main (int argc, char * argv[])
{
 printf ("sqrt (%f) = %f\n", 3.0, sqrt (3.0));
}

Q青森県の鉄道 90年代のトピック

鉄道にお詳しい方に、お聞きしたいことがございます。

青森県の鉄道の変遷の中で、
1993年頃~1996年頃にかけて、
鉄道ファンにとって魅力的な出来事は、何かありましたでしょうか。

どこかの線が廃線になって、ある形式の列車が最後の運行をした
とか
何線が開通して、ある形式の列車が初めて営業運転を開始した
とか
どのようなことでも結構です。
イベントのような形で、鉄道ファンが、写真を撮りに行ったり、その列車に乗りに行ったり、ぜひしたくなるような、珍しい出来事が、何かありましたら、ぜひ教えてください。

よろしくお願いいたします。

Aベストアンサー

弘南鉄道黒石線
国鉄黒石線を1984年に転換、1998年廃止。
1994年に同和鉱業小坂鉄道からキハ2100(日車標準型)入線、旧来の国鉄キハ22が運行終了。そういう意味ではこれが該当するかと思います。キハ2100は現在は弘南線田舎館駅付近の道の駅いなかだてに保存

青森県隣接で、同和鉱業小坂鉄道が1994年に旅客営業廃止、車両(キハ2100)は弘南鉄道黒石線に転籍。

#1の回答ににある南部縦貫鉄道。七戸駅は、車両、構内配線の一部が現存し、車両は動態保存。
http://www.ogaemon.com/

下北交通鉄道線、国鉄大畑線を1985年に転換、2001年廃止、大畑駅は大畑線キハ85動態保存会によって構内配線と車両が動態保存
http://home.t00.itscom.net/kiha22/index.html

なお、この時期を挟んだ時期(2000年前後が多い)に、県内多くの私鉄で車両更新が行われ、旧型車が大幅に用途廃止になっています。

Qppm raw形式の構造

http://www.mm2d.net/c/c-09.shtml

を参考に、ppm形式の画像を読み込むプログラムの動作確認を行っています。
この参考URLにのっているソースの実際にRGB情報を取り込む処理で、raw形式の部分だけいまいちわかりません。
-----------引用-------------
case 4: /* 2値raw形式 */
for(i=0 ; i<y ; i++){
for(j=0 ; j<(x-1)/8 ; j++){
if((tmp = getc(fp)) == EOF){
deletePicture(pPic);
return NULL;
}
for(k = 7;k >= 0;k--){
*(r++) = *(g++) = *(b++) = (unsigned char)((1-((tmp>>k)%2))*255);
}
}
if((tmp = getc(fp)) == EOF){
deletePicture(pPic);
return NULL;
}
for(k=7 ; k>=7-(x-1)%8 ; k--){
*(r++) = *(g++) = *(b++) = (unsigned char)((1-((tmp>>k)%2))*255);
}
}
break;
-----------終わり-------------

とありますが、
for(j=0 ; j<(x-1)/8 ; j++){
...
としている理由(x-1を8で割ってる理由)および
for(k = 7;k >= 0;k--){
*(r++) = *(g++) = *(b++) = (unsigned char)((1-((tmp>>k)%2))*255);
}
としている理由がちょっとわかりません。(そもそもraw形式のファイル構造がいまいちつかめない)ascii形式はわかるのですが、この箇所についてアドバイスをいただきたいです。

http://www.mm2d.net/c/c-09.shtml

を参考に、ppm形式の画像を読み込むプログラムの動作確認を行っています。
この参考URLにのっているソースの実際にRGB情報を取り込む処理で、raw形式の部分だけいまいちわかりません。
-----------引用-------------
case 4: /* 2値raw形式 */
for(i=0 ; i<y ; i++){
for(j=0 ; j<(x-1)/8 ; j++){
if((tmp = getc(fp)) == EOF){
deletePicture(pPic);
return NULL;
}
for(...続きを読む

Aベストアンサー

getcは1byteのデータを読みますが、pbmは1byteで8ピクセルのデータを保持しています。
そのため横一列(幅xピクセル)の情報を取得するのに端数がでることが有ります。それを処理しています。
例えば幅100pixなら
100 = (8*12) + 4
の括弧で括った部分を先に処理しています。
が、必要なわけではないです。kのループ内で判定した方がすっきりします。
まぁコストはかかりそうですが、止めた方がいいと思います。


pbmは白黒しかありませんので各ピクセルのRGBの取りうる値は
(255,255,255)か(0,0,0)しかありません。
ですのでシフトで目的のビットの値を最下位ビットにして、その0or1で白黒を決めています。
でもなんだか反転してますね?
何でだろう……記憶違いかな?
面倒ですのでそこはご自分でお願いします(汗)

Q115系の形式図

交友社発行の「鉄道ファン」で、巻末に大きな形式図がついていると思うのですが、その形式図で、115系が掲載されているものは、ないのでしょうか?ご存知の方、お知らせください。

Aベストアンサー

クハ115・モハ114の形式図であれば、
鉄道ファン021号(1963年発行)に載っています。

入手できるかどうかはわかりません。

参考URL:http://www.railhobbies.com/Rflist6.html

Qfor(s=p; *p; p++)の*p(ポインタ)の意味

for(s=p; *p; p++)の*p(ポインタ)の意味
C言語初心者です。
今ポインタを勉強しているのですが、
for文で上記のようなものが出てきて、意味が分からず困っています。
*pで*p != NULL と同じような意味になるみたいなのですが…。
どうしてそのような意味になるのでしょうか?

ちなみにsとpはポインタで、
sには配列(入力した文字列)の先頭アドレスが入っています。
pは文字列を指していて○○○○○NULL ←になるから上記のような条件で
回るんだろうなぁとはなんとなく考えているのですが。

Aベストアンサー

念のため:
ヌルポインタは「ビットパターンとして」0 じゃないかもしれませんが, ソースプログラムにおいて「ポインタが要求される場面」で「0」とあれば, それは「ヌルポインタ」です.
もうちょっと厳密に書くと「整定数 0」はヌルポインタに変換される.

Q日本中の鉄道時刻表をダウンロードできるサイトはありませんか?

日本中の鉄道時刻表を全てダウンロードできるサイトはありませんか?

できれば無料のところが良いですが、多少の費用がかかっても構いません。CDROMでの販売でも良いです。
また、プログラムで処理したいので、CSV形式等、扱いやすい形式になっているとありがたいです。

Aベストアンサー

 こちらにあるような Web巡回ソフトウェアを利用して、既ご回答いただいているようなサイトから、一気にダウンロードしてしまうという考え方もアリだと思います。

http://www.vector.co.jp/vpack/filearea/win/net/www/auto/

Q(C# .Net)フォームアプリケーションのコード記述方法について

こんにちは。
C# .Netを使ったフォームアプリケーションのコード記述方法について、
質問させてください。

例えば、ひとつのフォームに、複数のタブ(5つくらい)で構成される
タブコントロールを追加したとします。

通常の記述方法ですと、そのフォームの○○○.csファイルに、
各タブでの処理やその他のコードを追加していくことになると思います。

しかし、そうすると、必然的にコード量が相当長くなり、
また、自作の関数と、.Netに自動で追加される関数とが上下に混ざりあい、
結果的に非常に見づらいコードになってしまいます…。

今まで、Javaを使っていたときは、各TabごとにパネルのClassを用意して追加していたので、上記の点では困りませんでした。
同じようにすればいいかと思うのですが、今ひとつ勝手がわかりません。

皆さんのお知恵がありましたら、よろしくお願いいたします。

Aベストアンサー

一般的にどうか,というのはわかりませんが……。


> このように、ひとまとまりの設定内容をユーザコントロールにするという方法は、割と一般的な手法なのでしょうか?
> それとも、長いコードを我慢して使う方が一般的でしょうか?

私は割とユーザーコントロールを使います。
というか,そうとう小さな単位でも使う事があります。
# ラベル + テキストボックス + ボタンとか。ファイル入力用で,テキストボックスにドロップ可能,ボタンはBrowse用。

あと,長くなるのであれば,別のクラスに委譲させるとよいです。
特に,イベントを委譲させるとすっきりします (イベントは動作のトリガになるため)。
Javaの経験があるのであれば,Observerパターンがイベントとして構文化されたと考えるとわかりやすいかと思います。
Java: Observable (Java Platform SE 6)
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/Observable.html
Java: Observer (Java Platform SE 6)
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/Observer.html


まぁ,InitializeComponentが長くなるのは仕方がないのですが……。
# VS 2005以降であれば,別ファイル化されます (partial)。Disposeごと持っていくという弊害もありますが。

一般的にどうか,というのはわかりませんが……。


> このように、ひとまとまりの設定内容をユーザコントロールにするという方法は、割と一般的な手法なのでしょうか?
> それとも、長いコードを我慢して使う方が一般的でしょうか?

私は割とユーザーコントロールを使います。
というか,そうとう小さな単位でも使う事があります。
# ラベル + テキストボックス + ボタンとか。ファイル入力用で,テキストボックスにドロップ可能,ボタンはBrowse用。

あと,長くなるのであれば,別のクラスに委譲させ...続きを読む


人気Q&Aランキング