private void updateImageView() { if (stackedImage == null) { if (currentImage == null) { var path = thumbnailsView.CurrentObjectPath; if (path.Length > 0) { if (File.Exists(path)) { currentImage = ImageTools.LoadImage(libraw, path, currentSession); currentStack = null; positionLabel.Text = "..."; } else if (Directory.Exists(path)) { string cfaPath = path + "\\CFA"; if (Directory.Exists(cfaPath)) { prepareStack(cfaPath); currentImage = new RawImageWrapper(libraw, currentStack[currentStackIndex].FilePath, currentSession); positionLabel.Text = string.Format("{0} of {1}", currentStackIndex + 1, currentStack.Length); stackCheckBox.Visible = true; stackSelectedCheckBox.Checked = !currentStack[currentStackIndex].IsExcluded; stackSelectedCheckBox.Enabled = true; } else { string rawPath = path + "\\RAW"; if (Directory.Exists(rawPath)) { prepareStack(rawPath); currentImage = new RawImageWrapper(libraw, currentStack[currentStackIndex].FilePath, currentSession); positionLabel.Text = string.Format("{0} of {1}", currentStackIndex + 1, currentStack.Length); stackCheckBox.Visible = true; stackSelectedCheckBox.Checked = !currentStack[currentStackIndex].IsExcluded; stackSelectedCheckBox.Enabled = true; } } } } else { stackSelectedCheckBox.Enabled = true; } } if (currentImage != null) { if (quickPreviewRadioButton.Checked) { pictureBox.Image = currentImage.Preview; showZoomImage(); } else if (rawPreviewRadioButton.Checked) { RawImage rawImage = currentImage.RawImage; if (rawImage != null) { int saturation = (int)satNumericUpDown.Value; pictureBox.Image = rawImage.RenderBitmapHalfRes(currentCurve, saturation); showZoomImage(); } else { pictureBox.Image = null; } } if (infoRadioButton.Checked) { RawImage rawImage = currentImage.RawImage; if (rawImage != null) { pictureBox.Image = rawImage.GetHistogram(); showZoomImage(); } else { pictureBox.Image = null; } } } else { pictureBox.Image = null; } updateStackView(); stackCheckBox.Visible = currentStack != null; prevButton.Enabled = (currentStack != null && currentStackIndex > 0); nextButton.Enabled = (currentStack != null && currentStackIndex < currentStack.Length - 1); } else { if (pictureBox.Image != null) { pictureBox.Image.Dispose(); } int saturation = (int)satNumericUpDown.Value; pictureBox.Image = stackedImage.RenderBitmap(stackedImageCurve, saturation); showZoomImage(); } }
private void MainForm_KeyDown(object sender, KeyEventArgs e) { if (e.Control) { switch (e.KeyCode) { case Keys.A: if (currentStack != null) { currentStack[currentStackIndex].Offset = new Point(zoomCenterX, zoomCenterY); saveCurrentStack(); } while (nextButton.Enabled) { var prevRaw = currentImage.RawImage.GetRawPixels(); var prevCenter = new Point(((zoomCenterX) / 2) * 2, ((zoomCenterY) / 2) * 2); nextButton_Click(sender, e); showZoomImage(true, true); Application.DoEvents(); if (e.Shift) { double correlation = ImageTools.CalcCorrelation(currentImage.RawImage, prevRaw, new Point((zoomCenterX / 2) * 2, (zoomCenterY / 2) * 2), prevCenter, currentZoomRect.Size); System.Diagnostics.Trace.WriteLine(correlation.ToString()); if (correlation < 0.95) { break; } else { currentStack[currentStackIndex].Offset = new Point(zoomCenterX, zoomCenterY); saveCurrentStack(); } } else { break; } } e.Handled = true; break; case Keys.X: stackSelectedCheckBox.Checked = false; if (nextButton.Enabled) { nextButton_Click(sender, e); } e.Handled = true; break; case Keys.Z: { var width = zoomPanel.Width; var height = zoomPanel.Height; if (e.Shift) { height /= 2; width /= 2; if (height < 448) { noZoomRadioButton.Checked = true; } else { zoomPanel.Top += height; zoomPanel.Height -= height; zoomPanel.Left += width; zoomPanel.Width -= width; } } else { if (currentImage != null && !zoomPanel.Visible) { zoom1xRadioButton.Checked = true; } else { if (height < 448 * 2) { zoomPanel.Top -= height; zoomPanel.Height += height; zoomPanel.Left -= width; zoomPanel.Width += width; } } } showZoomImage(); } e.Handled = true; break; case Keys.Right: if (nextButton.Enabled) { nextButton_Click(sender, e); } e.Handled = true; break; case Keys.Left: if (prevButton.Enabled) { prevButton_Click(sender, e); } e.Handled = true; break; case Keys.F: mainPictureFullScreen(!exitFullScreenButton.Visible); e.Handled = true; break; case Keys.Delete: if (currentImage != null) { if (currentStack != null) { if (currentStackIndex >= 0) { // Удаляем картинку из стека removeFileFromStack(); } if (currentStackIndex == -1) { // Удаляем стек } } else { // Удаляем несгруппированную картинку } } break; } } }
static public void ToIris(AstroPhoto.LibRaw.Instance libraw, StackItem[] currentStack) { var dark = ImageTools.CreateDarkMedian(libraw, @"E:\Астрофото\2012-08-24\_DARK-ISO1600"); string irisRoot = "C:\\IRIS_TEMP\\"; var script = new List <string>(); int width = -1; int height = -1; int number = 1; for (int i = 0; i < currentStack.Length; i++) { if (currentStack[i].IsExcluded) { continue; } using (var rawImage = libraw.load_raw(currentStack[i].FilePath)) { ushort[] pixels = rawImage.GetRawPixels(); byte[] bytes = new byte[pixels.Length * 2]; for (int j = 0; j < pixels.Length; j++) { int pixDark = dark[j]; ushort pix = (ushort)(pixels[j] + 127 - pixDark); if (pix < 0) { pix = 0; } bytes[2 * j + 0] = (byte)(pix & 0xFF); bytes[2 * j + 1] = (byte)((pix & 0xFF00) >> 8); } width = rawImage.Width; height = rawImage.Height; System.IO.File.WriteAllBytes(irisRoot + number.ToString() + ".bin", bytes); script.Add(string.Format("import {0}.bin {1} {2} 0 2 0", number, width, height)); script.Add("cosme_cfa hot"); script.Add("cfa2rgb"); script.Add("save rgb" + number.ToString()); number++; } } script.Add("load rgb1"); System.IO.File.WriteAllLines(irisRoot + "import.pgm", script.ToArray()); var hot = new List <string>(); int nHot = 0; for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { if (dark[width * y + x] > 200) { int _x = x + 1; int _y = height - y; hot.Add(string.Format("P {0} {1}", _x, _y)); nHot++; } } } System.IO.File.WriteAllLines(irisRoot + "hot.lst", hot.ToArray()); }