织梦CMS - 轻松建站从此开始!

罗索

图像格式转换:RGB24转RGB8

落鹤生 发布于 2009-11-23 20:48 点击:次 
将24位位图转换为8位位图。
TAG:

将24位位图转换为8位位图。

什么也不说,给出程序。至于Bitmap.h和Bitmap.c的程序,上篇文章有。

#include <stdio.h>
#include <stdlib.h>
#include "Bitmap.h"

int main(int argc, char *argv[])
{
    Bitmap *bmp = (Bitmap*)malloc(sizeof(Bitmap));
    DWORD i = 0, j = 0, n = 0;
    BYTE r = 0, g = 0, b = 0;
    double gg = 0.0;
    BYTE *pixel = 0;
    DWORD line_width = 0;
    RGBQUAD pal[256];
   
    if( argc != 3 )
    {
        printf("Usage: 24to8 <img_src> <img_dst>\n");
        free(bmp);
        return -1;
    }
   
    load_bitmap( argv[1], bmp );
   
    if( ISEMPTY( bmp ) || !IS24BITS( bmp ) )
    {
        free_bitmap( bmp );
        free( bmp );
        return -1;
    }
   
    line_width = ( bmp->width * 8 + 31 ) / 32 * 4;
    pixel = (BYTE*)malloc( bmp->height * line_width * sizeof(BYTE) );
    if( !pixel )
    {
        free_bitmap( bmp );
        free( bmp );
        return -1;
    }
   
    for( i = 0; i < bmp->height; i++ )
    {
         for( j = 0, n = 0; j < bmp->width * 3; j += 3 )
         {
              r = GET_R( bmp, i, j );
              g = GET_G( bmp, i, j );
              b = GET_B( bmp, i, j );
             
              gg = 0.299 * r + 0.587 * g + 0.114 * b;
              gg = LIMTO0( gg ); gg = LIM255( gg );
             
              *( pixel + line_width * i + n ) = (BYTE)gg;
              n++;
         }
    }
   
    bmp->line_width = line_width;
    bmp->bit_count = 8;
    free( bmp->ptr );
    bmp->ptr = pixel;
    bmp->pal_length = sizeof(RGBQUAD) * 256;
    bmp->palette = (BYTE*)malloc( bmp->pal_length * sizeof(BYTE) );
   
    for( i = 0; i < 256; i++ )
    {
         pal[i].rgbBlue = (BYTE)i;
         pal[i].rgbGreen = (BYTE)i;
         pal[i].rgbRed = (BYTE)i;
         pal[i].rgbReserved = 0;
    }
    memcpy( bmp->palette, pal, bmp->pal_length );
   
    save_bitmap( argv[2], bmp );
   
    free_bitmap( bmp );
    free( bmp );
    free( pixel );
   
    return 0;
}

(落鹤生)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200911/7983.html]
本文出处:未知 作者:落鹤生
顶一下
(2)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容