gpt4 book ai didi

c# - 在 Java SWT 中使用 ImageData 在 Canvas 上显示图像的 WPF 等效项是什么

转载 作者:太空狗 更新时间:2023-10-29 20:23:17 24 4
gpt4 key购买 nike

以下 Java SWT 代码的 WPF 等价物是什么?我想根据 RGBA 值列表创建图像并显示在 Canvas 上。

private Image GetImage()
{

ImageData imageData = new ImageData(imageWidth, imageHeight,32,palette);

int pixelVecLoc=0;
for (int h = 0; h<imageHeight && (pixelVecLoc < currentImagePixelVec.size()); h++)
{
for (int w = 0; w<imageWidth && (pixelVecLoc < currentImagePixelVec.size()); w++)
{
int p = 0;
Pixel pixel = currentImagePixelVec.get(pixelVecLoc);
p = (pixel.Alpha<<24) | (pixel.Red<<16) | (pixel.Green<<8) | pixel.Blue;
imageData.setPixel(w, h, p);
pixelVecLoc++;
}
}

imageData = imageData.scaledTo(imageScaleWidth, imageScaleHeight);
Image image = ImageDescriptor.createFromImageData(imageData).createImage();
return image;
}

然后在 Canvas 上绘制它:

gc.drawImage(image, 0, 0); 

最佳答案

这是一个简短的片段,展示了如何创建自定义 RGBA 缓冲区并将像素数据写入其中 (based on this example):

int width = 512;
int height = 256;
int stride = width * 4 + (width % 4);
int pixelWidth = 4; // RGBA (BGRA)
byte[] imageData = new byte[width * stride]; // raw byte buffer

for (int y = 0; y < height; y++)
{
int yPos = y * stride;

for (int x = 0; x < width; x++)
{
int xPos = yPos + x * pixelWidth;

imageData[xPos + 2] = (byte) (RedValue); // replace *Value with source data
imageData[xPos + 1] = (byte) (GreenValue);
imageData[xPos ] = (byte) (BlueValue);
imageData[xPos + 3] = (byte) (AlphaValue);
}
}

然后使用 BitmapSource.Create Method (Int32, Int32, Double, Double, PixelFormat, BitmapPalette, IntPtr, Int32, Int32)方法连同 PixelFormats :

BitmapSource bmp = 
BitmapSource.Create(
width,
height,
96, // Horizontal DPI
96, // Vertical DPI
PixelFormats.Bgra32, // 32-bit BGRA
null, // no palette
imageData, // byte buffer
imageData.Length, // buffer size
stride); // stride

请注意,除代码段中所示的 alpha 组件 (BGRA) 外,字节顺序是相反的。

要将结果传输到 Canvas ,您可以先创建一个 Image ,将 BitmapSource 设置为 Source,最后将其添加到 Canvas 中:

// create image and set image as source
Image BmpImg = New Image();
BmpImg.Width = width;
BmpImg.Height = height;
BmpImg.Source = bmp;

// add image to canvas
canvas.Children.Add(BmpImg);

Canvas.SetLeft(BmpImg, 0); // to set position (x,y)
Canvas.SetTop(BmpImg, 0);

关于c# - 在 Java SWT 中使用 ImageData 在 Canvas 上显示图像的 WPF 等效项是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37855028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com