当我将两个像素的位图转换为图像位图时,我将其更改为具有许多像素的普通图像,并将其转换为渐变(黑白像素现在是从黑色到灰色到白色的渐变)。
public static BitmapImage Bitmap2BitmapImage(this Bitmap bitmap)
{
using (var memory = new MemoryStream())
{
bitmap.Save(memory, ImageFormat.Png);
memory.Position = 0;
var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memory;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
bitmapImage.Freeze();
return bitmapImage;
}
}发布于 2018-11-10 21:31:59
更新:这里有一个方法,可以在不进行平滑的情况下缩放Bitmap。
public static Bitmap Scale(int count, Bitmap source)
{
if (count <= 0) { return source; }
var bitmap = new Bitmap(source.Size.Width * count, source.Size.Height * count);
var sourcedata = source.LockBits(new Rectangle(new System.Drawing.Point(0, 0), source.Size), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
var bitmapdata = bitmap.LockBits(new Rectangle(new System.Drawing.Point(0, 0), bitmap.Size), ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
unsafe
{
var srcByte = (byte*)sourcedata.Scan0.ToPointer();
var dstByte = (byte*)bitmapdata.Scan0.ToPointer();
for (var y = 0; y < bitmapdata.Height; y++) {
for (var x = 0; x < bitmapdata.Width; x++) {
long index = (x / count) * 4 + (y / count) * sourcedata.Stride;
dstByte[0] = srcByte[index];
dstByte[1] = srcByte[index + 1];
dstByte[2] = srcByte[index + 2];
dstByte[3] = srcByte[index + 3];
dstByte += 4;
}
}
}
source.UnlockBits(sourcedata);
bitmap.UnlockBits(bitmapdata);
return bitmap;
}在这种情况下,您可以使用以下命令获取正确的BitmapSource:
var bitmapSrc = MyImagingHelper.Scale(100,twoPixelBitmap)//this will get a Bitmap size 200 * 100,change the ratio if it is not enough
.ToBitmapSource();//Convert to bitmap source如果您只想将Bitmap转换为BitmapSource以便在WPF控件中显示,请尝试此方法:
[DllImport("gdi32", EntryPoint = "DeleteObject")]
public static extern bool DeleteHBitmap(IntPtr hObject);
public static BitmapSource ToBitmapSource(this Bitmap target)
{
var hbitmap = target.GetHbitmap();
try {
return Imaging.CreateBitmapSourceFromHBitmap(hbitmap, IntPtr.Zero, Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
finally {
DeleteHBitmap(hbitmap);
}
}不要忽略DeleteHBitmap调用!
发布于 2018-11-10 22:35:00
public Bitmap getRandomTwo()
{
Bitmap alone = new Bitmap(1, 2);
alone.SetPixel(0, 0, Color.White);
alone.SetPixel(0, 1,Color.Black);
return alone;
}这是生成位图的代码
https://stackoverflow.com/questions/53236682
复制相似问题