Ich muss ein Bild drehen, das an eine Funktion als ein Array von BitmapFrames übergeben wird. Das fertige Produkt muss auch als BitmapFrame gespeichert werden, damit ich es an meine Export-Image-Funktion senden kann. Hilfe?Ich muss ein Bild drehen
[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);
}
}
Ein bisschen mehr Info wäre schön :) Was ist los mit dem Code, den Sie gebucht haben, zum Beispiel? – cwap
Auch (nicht relevant für Ihre Frage) Sie möchten Dispose() für alle Sachen, die Sie hier verwenden, wie Stream, Bitmap und Grafiken (oder verwenden Sie sie in einem using() -Block). – MusiGenesis
Sie können möglicherweise weitere Informationen über das Problem von dabonz413 hier herleiten: http://www.stackoverflow.com/questions/1190743/ Ich hatte noch keine Zeit, den Code gründlich durchzugehen, und ich habe diese Frage ein paar Wochen gestellt Vor, also bin ich nicht ganz frisch darauf. Aber ich werde hier wieder posten, wenn ich am Ende noch nützlichere (oder kontextbezogene) Informationen finde. – Giffyguy