winfrom 将bmp转换为bmp格式的单色图

问题描述

引用楼主gemeihao的回复:

中小企业如何利用云计算构建网...厂商为什么各自都推出了不同的...云计算与大数据领域的关系是?CIO选择云计算带来的时间节省是...如何利用云计算节约能源?winfrom将bmp转换为bmp格式的单色图位深度为1

以上代码是一个高手提高的但是有时候可以实现但是有时候又不行转换后的图片内容是空的但是转换前的内容是正常的希望高手支招

解决方案

解决方案二:
以下就是高手的代码但是有时候可以实现但是有时候又不行转换后的图片内容是空的但是转换前的内容是正常的希望高手支招转贴代码,参考一下:C#codeusingSystem;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.Runtime.InteropServices;//打开任一索引色的或者非索引色的图像Imageimg=Image.FromFile("r.bmp");ImageAttributesta=newImageAttributes();/*下面用Graphics类改变像点颜色,是靠ImageAttributes来把*彩色变成灰度,或者颠倒黑白,发现用矩阵处理还是很方便的*///如实际发现几个简单又好用的矩阵:/*float[][]mm=newfloat[][]{//彩色变灰度的矩阵newfloat[]{0.4f,0.4f,0.4f,0,0},newfloat[]{0.3f,0.3f,0.3f,0,0},newfloat[]{0.3f,0.3f,0.3f,0,0},newfloat[]{0,0,0,1,0},newfloat[]{0,0,0,0,1}};float[][]mm1=newfloat[][]{//彩色反相的矩阵newfloat[]{0,0.3f,0.5f,0,0},newfloat[]{0.5f,0.3f,0.5f,0,0},newfloat[]{0.5f,0.4f,0,0,0},newfloat[]{0,0,0,1,0},newfloat[]{0,0,0,0,1}};*/float[][]mm2=newfloat[][]{//彩色变反相灰度的矩阵newfloat[]{-0.4f,-0.4f,-0.4f,0,0},newfloat[]{-0.3f,-0.3f,-0.3f,0,0},newfloat[]{-0.3f,-0.3f,-0.3f,0,0},newfloat[]{1,1,1,1,0},newfloat[]{0,0,0,0,1}};ColorMatrixcmt=newColorMatrix(mm2);ta.SetColorMatrix(cmt);/*//如果确知图像里仅有纯黑白二色,也可用ColorMap来反相,它可逐色改变ColorMapmap1=newColorMap();map1.OldColor=Color.Black;map1.NewColor=Color.White;ColorMapmap2=newColorMap();map2.OldColor=Color.White;map2.NewColor=Color.Black;ta.SetRemapTable(newColorMap[]{map1,map2},ColorAdjustType.Bitmap);*//*有的图像比如索引格式的位图或GIF是无法创建Graphics的,*需要新建一非索引色位图取得Graphics对象以便做画或改变像点颜色。*/Bitmapbmp=newBitmap(img.Width,img.Height);Graphicsg=Graphics.FromImage(bmp);g.DrawImage(img,newRectangle(0,0,bmp.Width,bmp.Height),0,0,img.Width,img.Height,GraphicsUnit.Pixel,ta);//g.DrawString("FoxitPDFReader",newFont("宋体",8),newSolidBrush(Color.White),0,0);g.Dispose();/*在如下构造图像数据之前,也可以先创建一单色位图并锁定数据,*利用它现成的Stride简单计算出实际每行有效数据之后的填充字节数,而且可*在下面循环里直接写点Marshal.WriteByte(dt.Scan0,k,val);而不用数组拷贝*///以下,把反相或者涂画后的像点数据每一行的每8点简单合并成1byte存储intmidrgb=Color.FromArgb(128,128,128).ToArgb();intstride;//简单公式((width/8)+3)&(~3)stride=(bmp.Width%8)==0?(bmp.Width/8):(bmp.Width/8)+1;stride=(stride%4)==0?stride:((stride/4)+1)*4;intk=bmp.Height*stride;byte[]buf=newbyte[k];for(intj=0;j<bmp.Height;j++){k=j*stride;//因图像宽度不同、有的可能有填充字节需要跳越intx=0,ab=0;for(inti=0;i<bmp.Width;i++){//从灰度变单色(下法如果直接从彩色变单色效果不太好,不过反相也可以在这里控制)if((bmp.GetPixel(i,j)).ToArgb()>midrgb)ab=ab*2+1;elseab=ab*2;x++;if(x==8){buf[k++]=(byte)ab;ab=0;x=0;}}if(x>0){//循环实现:剩余有效数据不满1字节的情况下须把它们移往字节的高位部分for(intt=x;t<8;t++)ab=ab*2;buf[k++]=(byte)ab;}}Bitmapbb=newBitmap(img.Width,img.Height,PixelFormat.Format1bppIndexed);BitmapDatadt=bb.LockBits(newRectangle(0,0,bb.Width,bb.Height),ImageLockMode.ReadWrite,bb.PixelFormat);Marshal.Copy(buf,0,dt.Scan0,buf.Length);bb.UnlockBits(dt);bb.Save("w.bmp",ImageFormat.Bmp);bb.Dispose();bmp.Dispose();img.Dispose();

时间: 2024-10-23 06:18:48

winfrom 将bmp转换为bmp格式的单色图的相关文章

C# 怎么把矢量图emf转换为wmf格式

问题描述 因为需要用itextSharp向PDF添加emf的矢量图但是由于iText的Image不支持emf格式图片所以就想看看有没有能把emf格式转换为wmf格式的方法 解决方案 解决方案二:自顶解决方案三:自顶解决方案四:varim=Bitmap.FromFile(@"face.emf");im.Save(@"face.wmf",ImageFormat.Wmf); 这样就可以了,你自己测试一下解决方案五:这个我试过,显示这样的错误解决方案六:引用3楼xuzuni

如何使用java将GMT转换为UTC格式

问题描述 如何使用java将GMT转换为UTC格式 可能标题问的不是很合适,我需要将response的header时间记录下来进行对比,发现时间是类似这样的:"Tue, 20 Jan 2015 04:07:51 GMT",而我想要得到"2015-01-20T04:07:51Z"这样格式的,网上找了好久没找到合适的方法,时间解析老是解析不出来.目前我用了字符串截取的方法勉强凑合出来能用了,但有没有更好的方法呢?求助各位了. 解决方案 http://blog.csdn.

将Access数据转换为XML格式

access|xml|数据|转换 问:我怎样才能将Microsoft Access数据表中的数据转换为XML格式? 答:以下应用程序可以帮助您将Access数据转换为XML格式:Access 2002. ADO 2.5和SQLXML.您可以通过Access 2002(Microsoft Office XP的一部分)查询数据或者使用XML格式保存数据.您可能想自动完成这个转换过程.ADO 2.5及其后续版本使您可以将数据打开到一个记录集中,然后以XML格式持有记录集,如以下代码所示: rs.Sav

正则表达式例子:将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式

正则|转换 <html><head><title>正则表达式</title></head><body><a href="./">返回列表</a><form action="<? echo $PHP_SELF; ?>" method="post">请输入MM/DD/YYYY格式的日期:<input type="te

怎样将金山WPS文稿转换为PDF格式

WPS Office 2005最新版本支持将文字.表格.演示的文稿转换为PDF格式,方便大家交流.以下主要以WPS文字转换PDF文档为例进行介绍. 界面和功能介绍 选择"文件|输出为PDF格式"菜单项,打开"输出Adobe PDF 文件"的对话框.点击"常规"按钮,展开高级界面,如图1所示. 图1 转换PDF主设置界面 对话框主要分为3部分: 1.保存到--指定输出文件的保存路径和文件名; 2.输出选项--指定输出文档附带的一些功能属性; 3.权

WPS 2005怎样将文字、表格、演示的文稿转换为PDF格式

PDF作为与平台无关的文本格式,是Internet上进行电子文档发行和数字化信息传播的理想文档格式.WPS Office 2005最新版本支持将文字.表格.演示的文稿转换为PDF格式,方便大家交流. 以下主要以WPS文字转换PDF文档为例进行介绍. 界面和功能介绍 选择"文件|输出为PDF格式"菜单项,打开"输出Adobe PDF 文件"的对话框.点击"常规"按钮,展开高级界面,如图1所示. 图1 转换PDF主设置界面 对话框主要分为3部分: 1

Java调用命令实现视频上传过程中自动转换为flv格式并截图生成缩略图

//视频上传过程中自动转换为flv格式并截图生成缩略图(Java调用命令实现) import java.util.ArrayList; import java.util.List; public class VideoProcess { System.out.println(oldfilepath+"->"+newfilename+"- >"+newimg); List<String> commendF = new ArrayList<

excel中怎么将8位数字转换为日期格式?

  excel中怎么将8位数字转换为日期格式?            1.以EXCEL 2010为例:打开含有文本型日期的EXCEL表格文件,图中红框所示就是文本型日期,如图所示: 2.选中所有日期单元格,出现一个方形惊叹号,如图所示: 3.鼠标指向惊叹号,我们依次点击"倒三角"-〉"转换为数字": 4.点击后,这时文本型已经转换成数字型了,如图所示: 5.然后鼠标指向已选中的日期单元格,单击鼠标右键-〉"设置单元格格式": 6.弹出"

正则表达式实现将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式

 本文实例讲述了正则表达式实现将MM/DD/YYYY格式的日期转换为YYYY-MM-DD格式的方法.分享给大家供大家参考.具体实现方法如下:   代码如下: <html> <head><title>正则表达式</title></head> <body> <a href="./">返回列表</a> <form action="<? echo $PHP_SELF; ?>