c# – 在Java SWT中使用ImageData在Canvas上显示图像的WPF等价物
发布时间:2020-12-15 08:07:42 所属栏目:百科 来源:网络整理
导读:什么是以下 Java SWT代码的WPF等价物?我想从RGBA值列表中创建一个Image并在Canvas上显示. private Image GetImage(){ ImageData imageData = new ImageData(imageWidth,imageHeight,32,palette); int pixelVecLoc=0; for (int h = 0; himageHeight (pixelVe
什么是以下
Java SWT代码的WPF等价物?我想从RGBA值列表中创建一个Image并在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); 解决方法
这是一个简短的片段,展示了如何创建自定义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 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)之外,字节顺序是反向的. 要将结果传输到画布,您可以先创建一个 // 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |