>> [音楽再生]
>> ZAMYLA CHAN：レッツ·ブロー リサイズしたものまで。
サイズ変更では、ユーザーが経由で渡します コマンドライン、ビットマップ画像
彼らはあなたが番号でスケールする 彼らはまた、渡すこと
コマンドラインで。
我々はこれをどのように行うのですか？
>> さて、最初のものは、まず、みましょう ステップにこれを打破する。
あなたはINFILEを開きたいとしている 彼らはあなたを与えることだけでなく、
作成し、出力ファイルを開くこと あなたが置くつもりだ
インチサイズ変更画像
その後、あなたは、サイズ変更しているので、と それはビットマップなので、それヘッダなので、
また、ヘッダを更新するつもりだ 出力ファイルのための情報、
そしてそれをインチ送る
その後、に読み込まするつもりだ INFILEの走査線、
ピクセル毎、水平リサイズ とにそれらのピクセルを書き込む
指定された出力ファイル、 ユーザーの規模別。
>> あなたがすることを忘れないつもりだ 必要に応じてパディングを追加します。
後でその上でより多くの。
そして、また、縦方向にサイズ変更する​​。
[OK]をクリックします。
だから、これは少しあることを行っている それを行って、誰よりも複雑であるが、
何が似ていると、そのそれなのに意志であり、 再び、非常に有用であることが分かる。
それなのにがファイルを開くことを忘れないでください、 のヘッダー情報を更新する
出力ファイルは、スキャンラインに読み込み、 ピクセル毎、画素毎に書き込む
出力ファイルのスキャンラインへ。
>> だからもう一度、あなたの最初のステップは、おそらくかもしれない CP、それなのに、すかになる
あなたPSET5ディレクトリに。
しかし覚えておいて、あなたがそれをコピーする前に、 あなたが理解していることを確認し
非常に徹底的それなのに。
[OK]をクリックします。
>> それでは、ファイルを開いてみましょう。
あなたはそれを行う方法を知っている。
私はあなたにそれを残すつもりです。
次に、ヘッダ情報を更新する 出力ファイルのため。
我々は、新しいビットマップを有するので、 私たちは、新しいヘッダ情報を持っている。
ここで何が変化するのか？
さて、ファイルサイズは変更する予定です 我々はより多くを持っているつもりですので、
以前よりもピクセル。
画像サイズはまた、このように、ある である限り、変更するつもり
幅と高さ。
>> では、どの変数が正確にものがありますか？
さて、あなたはヘッダに見れば 情報、あなたがそこにある参照してください。
合計を表しbiSizeImage、 バイト単位で画像の大きさ、
ピクセルとパディングを含む。
biWidthは画像の幅である ピクセル単位で、マイナスパディング。
のbiHeightはの高さ ピクセル単位での画像。
そしてそうそれらはに含まれています 構造体BITMAPFILEHEADERと
BITMAPINFOHEADER。
あなたはそれによってある1伝えることができます bmp.hしようと見て
BITMAPINFOHEADER構造体と見て 変数がそこにリストされている。
>> そうoutfilesヘッダーを更新する 情報、あなたはするつもりだ
のこれらの値を変更する 高さと幅。
しかし、チャンスは、あなたは、いくつかが必要になる場合があります INFILEのヘッダ情報の
後で、その最高の両方を追跡するために。
しかし、あなたの変数に非常に明確であること 名前を誤っないように
に不正な値を書き込む 出力ファイルのヘッダー。
>> だから今のはへの読み込みを取得させ 走査線ピクセル毎。
繰り返しますが、私たちは信頼できるに頼るつもりだ I / Oライブラリを提出し、見
関数fread。
freadは、構造体へのポインタを取り込み つまり、そのバイトが含まれています
あなたが読んでいる中で、それぞれのサイズ あなたが読んでいる要素 -
再び、はsizeofは便利になるだろう ここで関数の数
あなたがしていることをサイズ、大きさの要素、 そして最後にある読み取り、および、
inpointer、ファイル あなたはから読んでいる。
だから、数要素を取っている inpointerからサイズ、およびの
データにそれらを置く。
>> 今では水平方向にサイズ変更する​​時が来た。
nは、各画素について、次いで、2に等しい場合 INFILE、我々はそれを書くことになるだろう
二度出力ファイル内。
どのようにしてファイルを書き込むのですか？
まあ、我々はfwriteの機能を持っているので、 我々は、構造体へのポインタを撮影した
それはあなたがしているバイトが含まれています からの書き込み、その後、我々は渡す
サイズ、数、出力、どこ あなたはそれを書くことになるだろう。
して、プロセスを繰り返す、となります forループができ、単純な反復。
>> しかし、我々は覚えておく必要があります インチパディングを追加する
パディングの概念は良く、ということで、 各ピクセルは3刺されていますが、
各スキャンラインの必須のサイズ 4バイトの倍数である。
それ故、ピクセル数ではない場合 4の倍数で、我々はいくつかを追加する必要があります
ちょうどゼロでパディング。
今、誰とは違ってそれを行って、とは異なり、 コピーし、INFILEイメージと
出力ファイルのファイルは、別の持ってきた 異なるパディング彼らはだから
異なる幅。
>> [OK]をクリックします。
ので、おそらく式だろう ここに便利になる。
私は、それを見つけるためにあなたにそれを残しておきますが、 パディングを書くために、ことを教えてくれ、
まあ、それは単純なのfputc関数の、 文字を渡す
あなたが書きたいことをしてから、 ファイルポインタがあること
に書き込む。
だから今我々は、水平方向のサイズを変更したので、 そして、パディングを使用
あなたのファイルを移動する必要があることを覚えておいてください あなたのための位置指示、
パディングにFREADすることはできません。
だからていることを確認したいファイル INFILEでの位置表示器
正しい点にある。
我々はまたしたいので、 垂直方向にサイズ変更します。
私達はちょうど、水平方向に伸ばすことができない すべての行を必要とするため、
n回コピーする。
>> 今、いくつかの異なるがあります これを実行する方法。
だから1、私達はでは、書き換え方法を使用することができます 我々は、全ての画素を覚えている
配列内の指定された行の、および その後、我々はとしてその配列を書く
何度も必要に応じて実行します。
またはどこに再コピー方法があります、 INFILEに一列に読み取った後
して、出力ファイルにそれを書いて、 パディングを追加し、我々はfseek関数
元の行の先頭に、 して、水平を繰り返す
そこからサイズ変更。
方法に関係なく、しかし、あなたはよ 全ての画素が繰り返されるようにする
n回、すべての行がなければ 同様にn回繰り返した。
>> それを使用すると、ビットマップがあるでしょう 命よりも大きい。
私の名前はZamylaであり、これはCS50である。