함수에 전달 된 이미지를 BitmapFrames 배열로 회전해야합니다. 완제품을 BitmapFrame으로 저장해야 내보내기 이미지 기능으로 보낼 수 있습니다. 도움?이미지를 회전해야합니다.
[Cmdlet(VerbsData.ConvertTo, "Rotate")]
public class RotateCmdlet : PSCmdlet
{
private BitmapFrame[] bFrame, outFrame;
private BitmapSource src;
private double pixelsize;
private int degrees;
private byte[] pixels, outPixels;
[Parameter(ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true), ValidateNotNullOrEmpty]
public BitmapFrame[] Bitmap
{
get
{
return bFrame;
}
set
{
bFrame = value;
}
}
[Parameter(Position = 0), ValidateNotNullOrEmpty]
public int Degrees
{
get
{
return degrees;
}
set
{
degrees = value;
}
}
protected override void ProcessRecord()
{
base.ProcessRecord();
Console.Write("Rotating the image {0} degrees...\n\n", degrees);
outFrame = new BitmapFrame[bFrame.Length];
for (int c = 0; c < bFrame.Length; c++)
{
Image image;
pixelsize = bFrame[c].PixelWidth * bFrame[c].PixelHeight;
pixels = new byte[(int)pixelsize];
outPixels = new byte[(int)pixelsize];
bFrame[c].CopyPixels(pixels, (int)(bFrame[c].Width * (bFrame[c].Format.BitsPerPixel/8.0)), 0);
Stream strm = new MemoryStream(pixels);
image = Image.FromStream(strm);
var newBitmap = new Bitmap((int)bFrame[c].PixelWidth, (int)bFrame[c].PixelHeight);
var graphics = Graphics.FromImage(newBitmap);
graphics.TranslateTransform((float)bFrame[c].PixelWidth/2, (float)bFrame[c].PixelHeight/2);
graphics.RotateTransform(degrees);
graphics.TranslateTransform(-(float)bFrame[c].PixelWidth/2, -(float)bFrame[c].PixelHeight/2);
graphics.DrawImage(image, new System.Drawing.Point(0, 0));
for (int i = 0; i < pixelsize; i++)
{
outPixels[i] = pixels[i];
}
src = BitmapSource.Create(bFrame[c].PixelWidth, bFrame[c].PixelHeight, bFrame[c].DpiX, bFrame[c].DpiY,
bFrame[c].Format, bFrame[c].Palette, outPixels, (int)(bFrame[c].Width * (bFrame[c].Format.BitsPerPixel/8)));
outFrame[c] = BitmapFrame.Create(src);
}
WriteObject(outFrame);
}
}
조금 더 많은 정보가 유용 할 것입니다. 예를 들어, 게시 한 코드에 어떤 문제가 있습니까? – cwap
또한 스트림, 비트 맵 및 그래픽과 같이 여기에서 사용하는 모든 항목에 Dispose()를 호출하거나 (using() 블록에서 사용) 질문과 관련이 없습니다. – MusiGenesis
dabonz413의 문제에 대한 자세한 정보는 여기에서 얻을 수 있습니다. http://www.stackoverflow.com/questions/1190743/ 코드를 철저히 조사 할 시간이 없었습니다. 몇 주 동안 질문을했습니다. 전, 전 완전히 그것에 신선한 아니에요. 그러나 더 유용한 (또는 문맥상의) 정보를 찾지 못하면 다시 게시 할 것입니다. – Giffyguy