搜索
bottom↓
回复: 14

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

[复制链接]

出0入0汤圆

发表于 2011-1-11 15:03:23 | 显示全部楼层 |阅读模式
例如:将b.bmp插入a.bmp的(30,40)坐标下
insert a.bmp b.bmp 30 40

如图:


(原文件名:demo.GIF)

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入70汤圆

发表于 2011-1-11 15:55:29 | 显示全部楼层
没有, 你要的话, 可以给你写个...

出0入0汤圆

 楼主| 发表于 2011-1-11 19:50:05 | 显示全部楼层
如果是要插入文字,实现思路是怎样呢?

出0入0汤圆

发表于 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[0];
            string file2 = args[1];

            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[2], out x);
            int.TryParse(args[3], 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);
        }
    }
}

出0入0汤圆

发表于 2011-1-11 23:32:01 | 显示全部楼层
插入文字的话,如果是用这种高级语言,直接就支持在图片上“画”文字
如果是上一代语言的话,就得费一点手工,先把文字按照字体字号画成图片,然后两张图片在做混成。

出0入0汤圆

 楼主| 发表于 2011-1-12 18:18:23 | 显示全部楼层
非常感谢

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

出0入0汤圆

发表于 2011-1-12 18:25:47 | 显示全部楼层
linux下 有个magicimg什么的软件可以  命令功能很强大

出0入0汤圆

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

出0入0汤圆

发表于 2011-1-12 22:53:58 | 显示全部楼层
用C自己处理像素的话,记得BMP的行是8像素对齐的。。。

出0入0汤圆

发表于 2011-1-12 23:18:04 | 显示全部楼层
这个很简单,不知道你是做什么用?

出0入0汤圆

发表于 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可以调用系统字库,如果是嵌入式系统可以考虑自己加入字库

出0入0汤圆

 楼主| 发表于 2011-1-13 22:27:58 | 显示全部楼层
windows下VC即可

用途是这样的:我想在桌面显示一个像http://site.baidu.com/list/wannianli.htm上的万年历

(原文件名:temp.GIF)
试过很多软件都实现不了,最后的想法是预先把每天的日历截成一个bmp,再写一个脚本,把每天的日历bmp插入到
桌面壁纸中。

出0入0汤圆

发表于 2011-1-14 12:55:53 | 显示全部楼层
自定义桌面里面的web试试,然后把窗口拉小点

出0入0汤圆

 楼主| 发表于 2011-1-14 20:29:21 | 显示全部楼层
回复【12楼】nian2yu3  
自定义桌面里面的web试试,然后把窗口拉小点
-----------------------------------------------------------------------

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

出0入0汤圆

 楼主| 发表于 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,以及其他处理器组成的异构平台音乐会执行速度提高。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 08:41

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表