?? output.c
字號:
/*
*********************************************************************
* File name: decode.c
* Version: 5.0(release v1.0) Date: Jan 12, 2006
* Author: xiezm Email: xiezm@wxintech.cn
* Company: Wuxi Intech co., ltd.
*
* Project: Jpeg Decoder for Trio
*********************************************************************
*/
#define OUTPUT_GLOBALS
#include "cf6_chess.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "djpg.h"
#define PUT_2B(array,offset,value) \
(array[offset] = (char) ((value) & 0xFF), \
array[offset+1] = (char) (((value) >> 8) & 0xFF))
#define PUT_4B(array,offset,value) \
(array[offset] = (char) ((value) & 0xFF), \
array[offset+1] = (char) (((value) >> 8) & 0xFF), \
array[offset+2] = (char) (((value) >> 16) & 0xFF), \
array[offset+3] = (char) (((value) >> 24) & 0xFF))
int XX, YY;
unsigned char *bmp_pool;
int mcu_in_row;
int mcu;
void output_header(void)
{
unsigned char bmpfileheader[14];
unsigned char bmpinfoheader[40];
unsigned int headersize, bfSize;
unsigned char bits_per_pixel;
bits_per_pixel = 24;
YY = (((Y-1)/8)+1)*8;
XX = (((X-1)/8)+1)*8;
mcu_in_row = XX / 8 / Hi[0];
mcu = 0;
if(NULL == (bmp_pool = (unsigned char *)malloc(YY*XX*3)))
{
fprintf(stderr, "can not allocate memory to bmp\n");
exit(0);
}
/* File size */
headersize = 14 + 40; /* Header */
bfSize = headersize + YY * XX * 3;
/* Set unused fields of header to 0 */
memset(bmpfileheader, 0, 14);
memset(bmpinfoheader, 0, 40);
/* Fill the file header */
bmpfileheader[0] = 0x42; /* first 2 bytes are ASCII 'B', 'M' */
bmpfileheader[1] = 0x4D;
PUT_4B(bmpfileheader, 2, bfSize); /* bfSize */
/* we leave bfReserved1 & bfReserved2 = 0 */
PUT_4B(bmpfileheader, 10, headersize); /* bfOffBits */
/* Fill the info header (Microsoft calls this a BITMAPINFOHEADER) */
PUT_2B(bmpinfoheader, 0, 40); /* biSize */
PUT_4B(bmpinfoheader, 4, XX); /* biWidth */
PUT_4B(bmpinfoheader, 8, YY); /* biHeight */
PUT_2B(bmpinfoheader, 12, 1); /* biPlanes - must be 1 */
PUT_2B(bmpinfoheader, 14, bits_per_pixel); /* biBitCount */
/* we leave biCompression = 0, for none */
/* we leave biSizeImage = 0; this is correct for uncompressed data */
/* we leave biXPelsPerMeter = 0, for none */
/* we leave biYPelsPerMeter = 0, for none */
/* we leave biClrUsed = 0 */
/* we leave biClrImportant = 0 */
if (fwrite(bmpfileheader, 1, 14, BMP) != 14)
{
fprintf(stderr,"can not write bmp file header\n");
exit(0);
}
if (fwrite(bmpinfoheader, 1, 40, BMP) != 40)
{
fprintf(stderr,"can not write bmp info header\n");
exit(0);
}
}
void output_mcu(void)
{
unsigned int v,h,r;
unsigned int i,j,k;
unsigned char *mcu_ptr;
unsigned char *du_ptr;
//x = (mcu%mcu_in_row)*Hi[0]*8;
//y = (mcu/mcu_in_row)*Vi[0]*8;
mcu_ptr = bmp_pool + ((mcu/mcu_in_row)*Vi[0]*8*XX + (mcu%mcu_in_row)*Hi[0]*8)*3;
for(v=0,r=0;v<Vi[0];v++)
{
for(h=0;h<Hi[0];h++,r++)
{
du_ptr = mcu_ptr + (v*8*XX + h*8)*3;
for(k=0,i=0;i<8;i++)
{
for(j=0;j<8;j++,k++)
{
*du_ptr++ = (unsigned char)(((reconstruc_buffer[r][k] ) & 0x001f)<<3);
*du_ptr++ = (unsigned char)(((reconstruc_buffer[r][k] >> 5) & 0x003f)<<2);
*du_ptr++ = (unsigned char)(((reconstruc_buffer[r][k] >> 11) & 0x001f)<<3);
}
du_ptr += ((XX-8)*3);
}
}
}
mcu++;
}
void write_to_bmp(void)
{
int i, j;
unsigned char *line;
for(i=YY;i>0;)
{
line = bmp_pool + (--i)*XX*3;
for(j=0;j<XX*3;j++)
{
fputc(line[j], BMP);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -