y_square 发表于 2011-1-11 15:03:23

将一幅位图(.bmp)插入另一幅位图的指定位置,有这样的命令行工具吗?

例如:将b.bmp插入a.bmp的(30,40)坐标下
insert a.bmp b.bmp 30 40

如图:

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_610445J1V2EI.GIF
(原文件名:demo.GIF)

SkyGz 发表于 2011-1-11 15:55:29

没有, 你要的话, 可以给你写个...

y_square 发表于 2011-1-11 19:50:05

如果是要插入文字,实现思路是怎样呢?

alextsln 发表于 2011-1-11 23:28:29

C#,vb弄这个比较简单,如果不是图片太大的话。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Drawing;

namespace InsertBMP
{
    class Program
    {
      static void Main(string[] args)
      {
            if (args.Length < 4)
            {
                Console.WriteLine("参数错误!");
                return;
            }

            string file1 = args;
            string file2 = args;

            if (file1.IndexOf("\\") == -1)
                file1 = Path.Combine(Environment.CurrentDirectory, file1);
            if (file2.IndexOf("\\") == -1)
                file2 = Path.Combine(Environment.CurrentDirectory, file2);

            if (!File.Exists(file1) || !File.Exists(file2))
            {
                Console.WriteLine("文件不存在");
                return;
            }

            int x, y;
            int.TryParse(args, out x);
            int.TryParse(args, out y);

            Bitmap bmp1, bmp2;
            try
            {
                bmp1 = new Bitmap(file1);
                bmp2 = new Bitmap(file2);
            }
            catch
            {
                Console.WriteLine("文件格式不正确");
                return;
            }

            
            Bitmap bmpNew = new Bitmap(Math.Max(bmp1.Width, bmp2.Width + x), Math.Max(bmp1.Height, bmp2.Height + y));

            for (int i = 0; i < bmp1.Width; i++)
            {
                for (int j = 0; j < bmp1.Height; j++)
                {
                  bmpNew.SetPixel(i, j, bmp1.GetPixel(i, j));
                }
            }

            for (int i = 0; i < bmp2.Width; i++)
            {
                for (int j = 0; j < bmp2.Height; j++)
                            {
                  bmpNew.SetPixel(i + x, j + y, bmp2.GetPixel(i, j));
                          }
            }
            bmp1.Dispose();
            bmp2.Dispose();

            bmpNew.Save(file1, System.Drawing.Imaging.ImageFormat.Bmp);
      }
    }
}

alextsln 发表于 2011-1-11 23:32:01

插入文字的话,如果是用这种高级语言,直接就支持在图片上“画”文字
如果是上一代语言的话,就得费一点手工,先把文字按照字体字号画成图片,然后两张图片在做混成。

y_square 发表于 2011-1-12 18:18:23

非常感谢

本人水平有限,只会C和VB 6,上面的是C#代码吗?

ssaweee 发表于 2011-1-12 18:25:47

linux下 有个magicimg什么的软件可以命令功能很强大

alextsln 发表于 2011-1-12 20:56:01

上面我贴的是C#。但VB6的话就比较讨厌,现在到哪里去找那个环境啊...
C的话,得找顺手的图形库,如果是老的tuberC,我在学校里倒是搞过,但现在手头一样没有环境...我等等用DevC弄弄看哦
。。。
库没找到,网上倒是找到了BMP的文件结构...不过要用C来写,实在不顺手啊
http://feng88724.javaeye.com/blog/316651#

gale 发表于 2011-1-12 22:53:58

用C自己处理像素的话,记得BMP的行是8像素对齐的。。。

luhuaren 发表于 2011-1-12 23:18:04

这个很简单,不知道你是做什么用?

badlyby 发表于 2011-1-13 13:39:04

你要在什么系统中使用?如果是windows可以调用#include <windows.h>
BITMAPFILEHEADER FileHeader;
BITMAPINFOHEADER BmpHeader;
如果使用嵌入式系统也很简单,自己定义量的结构体就可以
         typedef struct {
        unsigned long        bfSize;
        unsigned short        bfReserved1;
        unsigned short        bfReserved2;
        unsigned long        bfOffBits;
        } BITMAPFILEHEADER;
        typedef struct {
        unsigned long        biSize;
        long        biWidth;
        long        biHeight;
        unsigned short        biPlanes;
        unsigned short        biBitCount;
        unsigned long        biCompression;
        unsigned long        biSizeImage;
        long        biXPelsPerMeter;
        long        biYPelsPerMeter;
        unsigned long        biClrUsed;
        unsigned long        biClrImportant;
        } BITMAPINFOHEADER;
插入文字的话如果使用VC可以调用系统字库,如果是嵌入式系统可以考虑自己加入字库

y_square 发表于 2011-1-13 22:27:58

windows下VC即可

用途是这样的:我想在桌面显示一个像http://site.baidu.com/list/wannianli.htm上的万年历
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_611006BMVJ6M.GIF
(原文件名:temp.GIF)
试过很多软件都实现不了,最后的想法是预先把每天的日历截成一个bmp,再写一个脚本,把每天的日历bmp插入到
桌面壁纸中。

nian2yu3 发表于 2011-1-14 12:55:53

自定义桌面里面的web试试,然后把窗口拉小点

y_square 发表于 2011-1-14 20:29:21

回复【12楼】nian2yu3
自定义桌面里面的web试试,然后把窗口拉小点
-----------------------------------------------------------------------

试过,由于日历不在网页的左上角,所有不好办,而且网页更新及内存占用都是问题。

y_square 发表于 2011-5-13 15:11:57

找到这样的软件了!

关于ImageMagick

  ImageMagick (TM) 是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它可以运行于大多数的操作系统。ImageMagick的大多数功能的使用都来源于命令行工具。通常来说,它可以支持以下程序语言: Perl, C, C++, Python, PHP, Ruby, Java;现成的ImageMagick接口(PerlMagick, Magick++, PythonMagick, MagickWand for PHP, RubyMagick, and JMagick)是可利用的。这使得自动的动态的修改创建图片变为可能。ImageMagick支持至少90种图片格式: A, ART, AVI, AVS, B, BIE, BMP, BMP2, BMP3, C, CACHE, CAPTION, CIN, CIP, CLIP, CLIPBOARD, CMYK, CMYKA, CUR, CUT, DCM, DCX, DNG, DOT, DPS, DPX, EMF, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, FAX, FITS, FPX, FRACTAL, G, G3, GIF, GIF87, GRADIENT, GRAY, HDF, HISTOGRAM, HTM, HTML, ICB, ICO, ICON, JBG, JBIG, JNG, JP2, JPC, JPEG, JPG, JPX, K, LABEL, M, M2V, MAP, MAT, MATTE, MIFF, MNG, MONO, MPC, MPEG, MPG, MSL, MTV, MVG, NULL, O, OTB, P7, PAL, PALM, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PFA, PFB, PGM, PGX, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG24, PNG32, PNG8, PNM, PPM, PREVIEW, PS, PS2, PS3, PSD, PTIF, PWP, R, RAS, RGB, RGBA, RGBO, RLA, RLE, SCR, SCT, SFW, SGI, SHTML, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, TIF, TIFF, TILE, TIM, TTC, TTF, TXT, UIL, UYVY, VDA, VICAR, VID, VIFF, VST, WBMP, WMF, WMFWIN32, WMZ, WPG, X, XBM, XC, XCF, XPM, XV, XWD, Y, YCbCr, YCbCrA, YUV

功能和特性

这里仅是ImageMagick的可以做几个例子:

格式转换:从一种格式转换成图像到另一个(例如 PNG 转 JPEG)
变换:缩放,旋转,裁剪,翻转或修剪图像
透明度:使图像的部分变为透明
附加:添加形状或一帧到图像
装饰:添加边框或帧图像
特效:模糊,锐化,阈值,或色彩图像 动画:创建一个从GIF动画图像组序列
文本及评论:插入描述或艺术图像中的文字
图像识别:描述的格式和图像性能
综合:重叠了一个又一个的图像
蒙太奇:并列图像画布上的图像缩略图
电影支持:读写图像的共同使用的数字电影工作方式
图像计算器:应用数学表达式的图像或图像通道
离散傅立叶变换:实现正向和反向的DFT。
高动态范围图像:准确地表现了从最明亮的阳光直射到最深最黑暗的阴影找到真正的幕后广泛的强度水平
加密或解密图片:转换成不懂乱码,然后再返回普通图像
虚拟像素支持:方便以外区域的图像像素
大图像支持:读,过程,或写mebi和吉比像素的图像尺寸
执行:ImageMagick的是线程安全的,利用内部算法OpenMP的功能及快速的双核和四核处理器技术提供窗口优势
异构分布式处理:某些算法可以在跨越的CPU,GPU,以及其他处理器组成的异构平台音乐会执行速度提高。
页: [1]
查看完整版本: 将一幅位图(.bmp)插入另一幅位图的指定位置,有这样的命令行工具吗?