0
C#でGDIライブラリを使用せずに、ファイルからイメージを拡大縮小、回転、および翻訳して表示する必要があります。私はTransformedBitmap
オブジェクトとWPFの両方を使って変換を試みました。イメージ操作、変換されたイメージを表示しません
EDIT:I持ってここに
は2つの試みている... GDIを使用するために先に行く:TransformedBitmap:
BitmapSource mirroredImage = //...
// Figure out the center of the image
double centerX = ((double) mirroredImage.Width)/2.0;
double centerY = ((double) mirroredImage.Height)/2.0;
// Scale the image
TransformedBitmap scaledImage = new TransformedBitmap();
scaledImage.BeginInit();
scaledImage.Source = mirroredImage;
scaledImage.Transform = new ScaleTransform(test.scale, test.scale, centerX, centerY);
scaledImage.EndInit();
// Rotate the image (from the center of the image)
TransformedBitmap rotatedImage = new TransformedBitmap();
rotatedImage.BeginInit();
rotatedImage.Source = scaledImage;
rotatedImage.Transform = new RotateTransform(test.angle, centerX, centerY);
rotatedImage.EndInit();
// Translate the image
TransformedBitmap translatedImage = new TransformedBitmap(;
translatedImage.BeginInit();
translatedImage.Source = rotatedImage;
translatedImage.Transform = new TranslateTransform(test.xShift, test.yShift);
translatedImage.EndInit();
// Display the transformed image
int width = (int)translatedImage.Source.Width;
int height = (int)translatedImage.Source.Height;
int stride = width * ((translatedImage.Format.BitsPerPixel + 7)/8);
byte[] bits = new byte[height * stride];
translatedImage.CopyPixels(bits, stride, 0);
unsafe
{
fixed (byte* pBits = bits)
{
IntPtr ptr = new IntPtr(pBits);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(
width,
height,
mstride,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb,
ptr);
picMain.Image = bitmap; // picMain is a PictureBox in the Form
}
}
this.Refresh() // This is in a class inheriting Form
WPF:
int mwidth = mirroredImage.PixelWidth;
int mheight = mirroredImage.PixelHeight;
int mstride = mwidth * ((mirroredImage.Format.BitsPerPixel + 7)/8);
byte[] mbits = new byte[mheight * mstride];
mirroredImage.CopyPixels(mbits, mstride, 0);
ImageSource scaledImageSrc = BitmapSource.Create(mirroredImage.PixelWidth, mirroredImage.PixelHeight, mirroredImage.DpiX, mirroredImage.DpiY, mirroredImage.Format, mirroredImage.Palette, mbits, mstride);
System.Windows.Controls.Image scaledImage = new System.Windows.Controls.Image();
scaledImage.Source = scaledImageSrc;
scaledImage.RenderTransform = new ScaleTransform(test.scale, test.scale, centerX, centerY);
System.Windows.Controls.Image rotatedImage = new System.Windows.Controls.Image();
rotatedImage.Source = scaledImage.Source;
rotatedImage.RenderTransform = new RotateTransform(test.angle, centerX, centerY);
System.Windows.Controls.Image translatedImage = new System.Windows.Controls.Image();
translatedImage.Source = rotatedImage.Source;
translatedImage.RenderTransform = new TranslateTransform(test.xShift, test.yShift);
Window main = new Window();
main.Title = "Test Image";
// Create a Canvas to contain the Image.
Canvas canvas1 = new Canvas();
canvas1.Width = 200;
canvas1.Height = 200;
Canvas.SetLeft(translatedImage, 0);
Canvas.SetTop(translatedImage, 0);
canvas1.Children.Add(translatedImage);
main.Content = canvas1;
main.ShowDialog();
これらのすべての結果は、単純にディスプレイです元のmirroredImage
の変換された画像を表示するには、translatedImage
? (tutorialから)私のFormクラスで
興味があるだけに...なぜあなたはGDIを使用することはできませんか? –
変換中に予期せぬピクセルマッピングに関係するものがありますが、正確にはわかりません。 – vlad417
タイトルに「C#」などのプレフィックスを付けないでください。それがタグのためのものです。 –