C# 灰度图到bmp单色

问题描述

解决方案

解决方案二:
publicstaticBitmapMonochromeLockBits(Bitmappimage){Bitmapsource=null;//Iforiginalbitmapisnotalreadyin32BPP,ARGBformat,thenconvertif(pimage.PixelFormat!=PixelFormat.Format32bppArgb){source=newBitmap(pimage.Width,pimage.Height,PixelFormat.Format32bppArgb);source.SetResolution(pimage.HorizontalResolution,pimage.VerticalResolution);using(Graphicsg=Graphics.FromImage(source)){g.DrawImageUnscaled(pimage,0,0);}}else{source=pimage;}//LocksourcebitmapinmemoryBitmapDatasourceData=source.LockBits(newRectangle(0,0,source.Width,source.Height),ImageLockMode.ReadOnly,PixelFormat.Format32bppArgb);//CopyimagedatatobinaryarrayintimageSize=sourceData.Stride*sourceData.Height;byte[]sourceBuffer=newbyte[imageSize];Marshal.Copy(sourceData.Scan0,sourceBuffer,0,imageSize);//Unlocksourcebitmapsource.UnlockBits(sourceData);//CreatedestinationbitmapBitmapdestination=newBitmap(source.Width,source.Height,PixelFormat.Format1bppIndexed);//LockdestinationbitmapinmemoryBitmapDatadestinationData=destination.LockBits(newRectangle(0,0,destination.Width,destination.Height),ImageLockMode.WriteOnly,PixelFormat.Format1bppIndexed);//CreatedestinationbufferimageSize=destinationData.Stride*destinationData.Height;byte[]destinationBuffer=newbyte[imageSize];intsourceIndex=0;intdestinationIndex=0;intpixelTotal=0;bytedestinationValue=0;intpixelValue=128;intheight=source.Height;intwidth=source.Width;intthreshold=500;//Iteratelinesfor(inty=0;y<height;y++){sourceIndex=y*sourceData.Stride;destinationIndex=y*destinationData.Stride;destinationValue=0;pixelValue=128;//Iteratepixelsfor(intx=0;x<width;x++){//Computepixelbrightness(i.e.totalofRed,Green,andBluevalues)pixelTotal=sourceBuffer[sourceIndex+1]+sourceBuffer[sourceIndex+2]+sourceBuffer[sourceIndex+3];if(pixelTotal>threshold){destinationValue+=(byte)pixelValue;}if(pixelValue==1){destinationBuffer[destinationIndex]=destinationValue;destinationIndex++;destinationValue=0;pixelValue=128;}else{pixelValue>>=1;}sourceIndex+=4;}if(pixelValue!=128){destinationBuffer[destinationIndex]=destinationValue;}}//CopybinaryimagedatatodestinationbitmapMarshal.Copy(destinationBuffer,0,destinationData.Scan0,imageSize);//Unlockdestinationbitmapdestination.UnlockBits(destinationData);//Disposeofsourceifnotoriginallysuppliedbitmapif(source!=pimage){source.Dispose();}//Returnreturndestination;}

复制别人的

时间: 2024-07-31 02:12:18

C# 灰度图到bmp单色的相关文章

图像处理-用C语言将bmp 8位灰度图的灰度值缩小16倍,调色板中数值由255行变成16行调

问题描述 用C语言将bmp 8位灰度图的灰度值缩小16倍,调色板中数值由255行变成16行调 用C语言将bmp 8位灰度图的灰度值缩小16倍,由0-255变成0-16,调色板中数值由255行变成16行,同时调色板rgbBlue rgbRed rgbGreen数值范围由0-255变成0-1.我用c语言实现后,为什么图片不再是灰度图,有了其他颜色??? ```#pragma once #ifndef BMP_H_INCLUDED #define BMP_H_INCLUDED #include #in

vc++-怎么建立一个与原图大小相同的25色灰度图或怎么定义newdib

问题描述 怎么建立一个与原图大小相同的25色灰度图或怎么定义newdib 解决方案 http://wenku.baidu.com/link?url=Wzboi69LR2Qhx-OzcRHSIEvcMqxqri4QztXVp-KuMcb3Lm5_6O_8k1oXcu0tDHX_9fdyZPFrw8pLfSh5RuQXFy8-bnzw8GS3HBGT09kYFba 解决方案二: 这个建议你去做一个 bmp图的表格 分析图片的结构

图像处理-要将一张512*512的图片转换为灰度图出了问题

问题描述 要将一张512*512的图片转换为灰度图出了问题 代码如下 private void memory_Click(object sender, EventArgs e) { if (curBitmap != null) { Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height); System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBit

C#中GDI+可以画灰度图么,用什么语句啊

问题描述 就是画一幅黑白图,求大神解答 解决方案 解决方案二:你取RGB三个通道之一为基准.把另外2个通道的值改为与基准值相同,得到的就是灰度了.你不论用什么方法(保留一个通道,或者平均三个通道),把每个像素RGB三个通道的值改的一样,得到的就是"灰度"图像.解决方案三:Bitmapbmp=newBitmap(100,100);using(Graphicsg=Graphics.FromImage(bmp)){g.FillEllipse(Brushes.Red,newRectangle(

指针-opencv学习灰度图锐化的两个函数的差别不理解

问题描述 opencv学习灰度图锐化的两个函数的差别不理解 下面是一个灰度图锐化的函数,我有两种方式实现,方式1,和方式2,居然得到的结果不一样,图片数据也不一样,请高手看一下,可能是C语言的知识掌握的不好. void my_sharpen(const cv::Mat &image, cv::Mat &result) { result.create (image.size(), image.type ()); for(int j=1; j<image.rows-1; j++) { u

图片-matlab中灰度图转彩色图的问题

问题描述 matlab中灰度图转彩色图的问题 我将两张彩色图片通过rgd2gray转化成灰度图后,通过算法融合两张图片,如何在转回彩色图,就大神解答 解决方案 彩色图转灰度图彩色图转灰度图彩色图转灰度图的原理和注意事项

img-平均值法求图像灰度图 运行够调试错误

问题描述 平均值法求图像灰度图 运行够调试错误 double *original_gray(double *R_original_img, double *G_original_img, double *B_original_img) { unsigned long height = 0; unsigned long width = 0; height = srcBI.biHeight; width = srcBI.biWidth; unsigned long h_B = 0; unsigned

qt-Qt QImage 怎样把16位的灰度图数据拷贝到内存中

问题描述 Qt QImage 怎样把16位的灰度图数据拷贝到内存中 Qt QImage 怎样把16位的灰度图数据拷贝到内存中.请知道的大神说一下吧,谢谢啦

Android提高之使用NDK把彩图转换灰度图的方法_Android

一般而言在Android上使用JAVA实现彩图转换为灰度图,与J2ME上的实现方法类似,不过遇到频繁地转换或者是大图转换时,就必须使用NDK来提高速度了.本文主要通过JAVA和NDK这两种方式来分别实现彩图转换为灰度图,并给出速度的对比,供大家参考. 先来简单地介绍一下Android的NDK使用步骤: 以NDK r4为例,或许以后新版的NDK的使用方法略有不同. 1.下载支持C++的android-ndk-r4-crystax,支持C++的话可玩性更强. 2.下载cygwin,选择ftp://m