JPEG保存の処理
ryoさんからの質問で、SH-2Aでjpeglibを利用して画像を圧縮したい!ということですが、コメントに文字制限があり、貼れなかったので本文に。
私の場合、以下のような関数を作り保存しています。どうでしょうか?ヒントになりますか?
これは、Toファイルですが、Toメモリも作りました。(まあ同じでしょうが・・)
ただし、私の場合、外部の拡張RAMでJPEG圧縮処理を行っています。
(ガイガーばかりで、忘れていましたが、これを整理しようと思ってたんですよね。時間ができたら整理します。)
これは、Toファイルですが、Toメモリも作りました。(まあ同じでしょうが・・)
ただし、私の場合、外部の拡張RAMでJPEG圧縮処理を行っています。
(ガイガーばかりで、忘れていましたが、これを整理しようと思ってたんですよね。時間ができたら整理します。)
int compless_jpeg_to_file(char *fname, int quality)
{
{
struct jpeg_compress_struct cinfo; // 圧縮ファイル
struct jpeg_error_mgr jerr;
unsigned char* pBuff = NULL;
unsigned long size = 0;
int row_stride = 0;
FRESULT result;
UINT cnt;
FIL File; /* ファイルオブジェクト */
memset(&cinfo, 0x00, sizeof(cinfo));
// JPEGオブジェクトの生成
cinfo.err = jpeg_jsp_error(&jerr);
jpeg_create_compress(&cinfo);
// ファイルへの出力
result = f_open(&File, fname, FA_CREATE_ALWAYS|FA_WRITE);
// 出力先をファイル指定
jpeg_stdio_dest( &cinfo, &File );
cinfo.image_width = 320;
cinfo.image_height = 240;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults( &cinfo );
// Jpeg画質設定
jpeg_set_quality(&cinfo, quality, TRUE);
// エンコード開始
jpeg_start_compress(&cinfo, TRUE);
// 1ラインごとに処理する。
{
// 終了
jpeg_finish_compress( &cinfo );
// Jpegオブジェクト破棄
jpeg_destroy_compress( &cinfo );
struct jpeg_error_mgr jerr;
unsigned char* pBuff = NULL;
unsigned long size = 0;
int row_stride = 0;
FRESULT result;
UINT cnt;
FIL File; /* ファイルオブジェクト */
memset(&cinfo, 0x00, sizeof(cinfo));
// JPEGオブジェクトの生成
cinfo.err = jpeg_jsp_error(&jerr);
jpeg_create_compress(&cinfo);
// ファイルへの出力
result = f_open(&File, fname, FA_CREATE_ALWAYS|FA_WRITE);
// 出力先をファイル指定
jpeg_stdio_dest( &cinfo, &File );
cinfo.image_width = 320;
cinfo.image_height = 240;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults( &cinfo );
// Jpeg画質設定
jpeg_set_quality(&cinfo, quality, TRUE);
// エンコード開始
jpeg_start_compress(&cinfo, TRUE);
// 1ラインごとに処理する。
{
volatile JSAMPARRAY buffer;
volatile JSAMPROW row;
volatile JSAMPLE img[320][3];
volatile _UWORD* p = (_UWORD*)RAM_EXT_TFT_SAVE;
int i, j;
volatile JSAMPROW row;
volatile JSAMPLE img[320][3];
volatile _UWORD* p = (_UWORD*)RAM_EXT_TFT_SAVE;
int i, j;
row = (JSAMPROW)&img[0][0];
buffer = (JSAMPARRAY)&row;
for(i = 0 ; i < 240 ; i++)
{
}buffer = (JSAMPARRAY)&row;
for(i = 0 ; i < 240 ; i++)
{
for(j = 0 ; j < 320 ; j++)
{
jpeg_write_scanlines( &cinfo, buffer, 1);
}{
img[j][0] = (_UBYTE)(((*p >> 8) & 0x00F8)); // R
img[j][1] = (_UBYTE)(((*p >> 3) & 0x00FC)); // G
img[j][2] = (_UBYTE)(((*p << 3) & 0x00F8)); // B
p++;
}img[j][1] = (_UBYTE)(((*p >> 3) & 0x00FC)); // G
img[j][2] = (_UBYTE)(((*p << 3) & 0x00F8)); // B
p++;
jpeg_write_scanlines( &cinfo, buffer, 1);
// 終了
jpeg_finish_compress( &cinfo );
// Jpegオブジェクト破棄
jpeg_destroy_compress( &cinfo );
// ファイルを閉じる
f_close(&File);
return 0;
}f_close(&File);
return 0;