public override void ExportThread() { var progressLayoutIdx = ProgressReporter.GetProgressIndex(ProgressName.LAYOUT); var progressCardIdx = ProgressReporter.GetProgressIndex(ProgressName.CARD); ProgressReporter.ProgressReset(progressLayoutIdx, 0, ExportLayoutIndices.Length, 0); ChangeExportLayoutIndex(ExportLayoutIndices[0]); ProgressReporter.ProgressReset(progressCardIdx, 0, CurrentDeck.CardCount, 0); UpdateBufferBitmap(CurrentDeck.CardLayout.width, CurrentDeck.CardLayout.height); var zGraphics = Graphics.FromImage(m_zExportCardBuffer); var nCardIdx = m_nImageExportIndex; zGraphics.Clear(CurrentDeck.CardLayout.exportTransparentBackground ? CardMakerConstants.NoColor : Color.White); CurrentDeck.ResetDeckCache(); CurrentDeck.CardPrintIndex = nCardIdx++; CardRenderer.DrawPrintLineToGraphics(zGraphics, 0, 0, !CurrentDeck.CardLayout.exportTransparentBackground); m_zExportCardBuffer.SetResolution(CurrentDeck.CardLayout.dpi, CurrentDeck.CardLayout.dpi); ProgressReporter.ProgressStep(progressLayoutIdx); try { ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, false); var thread = new Thread(() => Clipboard.SetImage(m_zExportCardBuffer)); thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA thread.Start(); thread.Join(); //Wait for the thread to end } catch (Exception) { Logger.AddLogLine("Error copying layout image to clipboard."); ProgressReporter.ThreadSuccess = false; ProgressReporter.Shutdown(); return; } ProgressReporter.ProgressStep(progressCardIdx); ProgressReporter.ThreadSuccess = true; ProgressReporter.Shutdown(); }
public void ExportThread() { var zWait = WaitDialog.Instance; zWait.ProgressReset(0, 0, ExportLayoutEndIndex - ExportLayoutStartIndex, 0); ChangeExportLayoutIndex(ExportLayoutStartIndex); zWait.ProgressReset(1, 0, CurrentDeck.CardCount, 0); UpdateBufferBitmap(CurrentDeck.CardLayout.width, CurrentDeck.CardLayout.height); var zGraphics = Graphics.FromImage(m_zExportCardBuffer); var nCardIdx = m_nImageExportIndex; zGraphics.Clear(CurrentDeck.CardLayout.exportTransparentBackground ? CardMakerConstants.NoColor : Color.White); CurrentDeck.ResetDeckCache(); CurrentDeck.CardPrintIndex = nCardIdx++; CardRenderer.DrawPrintLineToGraphics(zGraphics, 0, 0, !CurrentDeck.CardLayout.exportTransparentBackground); m_zExportCardBuffer.SetResolution(CurrentDeck.CardLayout.dpi, CurrentDeck.CardLayout.dpi); zWait.ProgressStep(1); try { ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, false); var thread = new Thread(() => Clipboard.SetImage(m_zExportCardBuffer)); thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA thread.Start(); thread.Join(); //Wait for the thread to end } catch (Exception) { Logger.AddLogLine("Error copying layout image to clipboard."); zWait.ThreadSuccess = false; zWait.CloseWaitDialog(); return; } zWait.ProgressStep(0); zWait.ThreadSuccess = true; zWait.CloseWaitDialog(); }
public void ExportThread() { var zWait = WaitDialog.Instance; zWait.ProgressReset(0, 0, ExportLayoutEndIndex - ExportLayoutStartIndex, 0); for (var nIdx = ExportLayoutStartIndex; nIdx < ExportLayoutEndIndex; nIdx++) { ChangeExportLayoutIndex(nIdx); var nPadSize = CurrentDeck.CardCount.ToString(CultureInfo.InvariantCulture).Length; zWait.ProgressReset(1, 0, CurrentDeck.CardCount, 0); var exportWidth = CurrentDeck.CardLayout.exportWidth == 0 ? CurrentDeck.CardLayout.width : CurrentDeck.CardLayout.exportWidth; var exportHeight = CurrentDeck.CardLayout.exportHeight == 0 ? CurrentDeck.CardLayout.height : CurrentDeck.CardLayout.exportHeight; if (CurrentDeck.CardLayout.width > exportWidth || CurrentDeck.CardLayout.height > exportHeight) { Logger.AddLogLine( $"ERROR: Layout: [{CurrentDeck.CardLayout.Name}] exportWidth and/or exportHeight too small! (Skipping export)"); continue; } UpdateBufferBitmap(exportWidth, exportHeight); var zGraphics = Graphics.FromImage(m_zExportCardBuffer); var nCardIdx = 0; do { var nX = 0; var nY = 0; var nCardsExportedInImage = 0; zGraphics.Clear(CurrentDeck.CardLayout.exportTransparentBackground ? Color.FromArgb(0, 0, 0, 0) : Color.White); do { CurrentDeck.ResetDeckCache(); CurrentDeck.CardPrintIndex = nCardIdx++; nCardsExportedInImage++; CardRenderer.DrawPrintLineToGraphics(zGraphics, nX, nY, !CurrentDeck.CardLayout.exportTransparentBackground); m_zExportCardBuffer.SetResolution(CurrentDeck.CardLayout.dpi, CurrentDeck.CardLayout.dpi); zWait.ProgressStep(1); int nMoveCount = 1; if (m_nSkipStitchIndex > 0) { var x = ((nCardsExportedInImage + 1) % m_nSkipStitchIndex); if (x == 0) { // shift forward an extra spot to ignore the dummy index nMoveCount = 2; } } var bOutOfSpace = false; for (int nShift = 0; nShift < nMoveCount; nShift++) { nX += CurrentDeck.CardLayout.width + CurrentDeck.CardLayout.buffer; if (nX + CurrentDeck.CardLayout.width > exportWidth) { nX = 0; nY += CurrentDeck.CardLayout.height + CurrentDeck.CardLayout.buffer; } if (nY + CurrentDeck.CardLayout.height > exportHeight) { // no more space bOutOfSpace = true; break; } } if (bOutOfSpace) { break; } } while (nCardIdx < CurrentDeck.CardCount); string sFileName; // NOTE: nCardIdx at this point is 1 more than the actual index ... how convenient for export file names... if (!string.IsNullOrEmpty(m_sOverrideStringFormat)) { // check for the super override sFileName = CurrentDeck.TranslateFileNameString(m_sOverrideStringFormat, nCardIdx, nPadSize); } else if (!string.IsNullOrEmpty(CurrentDeck.CardLayout.exportNameFormat)) { // check for the per layout override sFileName = CurrentDeck.TranslateFileNameString(CurrentDeck.CardLayout.exportNameFormat, nCardIdx, nPadSize); } else // default { sFileName = CurrentDeck.CardLayout.Name + "_" + (nCardIdx).ToString(CultureInfo.InvariantCulture).PadLeft(nPadSize, '0'); } try { ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, false); m_zExportCardBuffer.Save( m_sExportFolder + sFileName + "." + m_eImageFormat.ToString().ToLower(), m_eImageFormat); ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, true); } catch (Exception) { Logger.AddLogLine("Invalid Filename or IO error: " + sFileName); zWait.ThreadSuccess = false; zWait.CloseWaitDialog(); return; } } while (nCardIdx < CurrentDeck.CardCount); zWait.ProgressStep(0); } zWait.ThreadSuccess = true; zWait.CloseWaitDialog(); }
public void ExportThread() { var zWait = WaitDialog.Instance; #if !MONO_BUILD Bitmap zBuffer = null; #endif zWait.ProgressReset(0, 0, ExportLayoutEndIndex - ExportLayoutStartIndex, 0); for (var nIdx = ExportLayoutStartIndex; nIdx < ExportLayoutEndIndex; nIdx++) { ChangeExportLayoutIndex(nIdx); if (CurrentDeck.EmptyReference) { // empty reference layouts are not exported zWait.ProgressStep(0); continue; } zWait.ProgressReset(1, 0, CurrentDeck.CardCount, 0); ConfigurePointSizes(CurrentDeck.CardLayout); // necessary tracking for which index of the layout is to be exported (this is NOT necessarily the index of the card due to the page back functionality) var nNextExportIndex = 0; if (0 < nIdx) { if (CardMakerSettings.PrintLayoutsOnNewPage) { AddPage(); } if (CardMakerSettings.PrintAutoHorizontalCenter || (m_dDrawX + m_dLayoutPointWidth > m_dPageMarginEndX)) // this is the case where a layout won't fit in the remaining space of the row { MoveToNextRow(nNextExportIndex); } } // should be adjusted after the above move to next row m_dNextRowYAdjust = Math.Max(m_dNextRowYAdjust, m_dLayoutPointHeight + m_dBufferY); if (CardMakerSettings.PrintAutoHorizontalCenter) { CenterLayoutPositionOnNewRow(nNextExportIndex); } #if !MONO_BUILD zBuffer?.Dispose(); zBuffer = new Bitmap(CurrentDeck.CardLayout.width, CurrentDeck.CardLayout.height); float fOriginalXDpi = zBuffer.HorizontalResolution; float fOriginalYDpi = zBuffer.VerticalResolution; #endif foreach (var nCardIdx in GetExportIndices()) { CurrentDeck.ResetDeckCache(); CurrentDeck.CardPrintIndex = nCardIdx; #if MONO_BUILD // mono build won't support the optimization so re-create the buffer Bitmap zBuffer = new Bitmap(CurrentDeck.CardLayout.width, CurrentDeck.CardLayout.height); #endif #if !MONO_BUILD // minor optimization, reuse the same bitmap (for drawing sake the DPI has to be reset) zBuffer.SetResolution(fOriginalXDpi, fOriginalYDpi); #endif if (nCardIdx == -1) { Graphics.FromImage(zBuffer).FillRectangle(Brushes.White, 0, 0, zBuffer.Width, zBuffer.Height); // note: some oddities were observed where the buffer was not flood filling } else { CardRenderer.DrawPrintLineToGraphics(Graphics.FromImage(zBuffer)); } // apply any export rotation ProcessRotateExport(zBuffer, CurrentDeck.CardLayout, false); // before rendering to the PDF bump the DPI to the desired value zBuffer.SetResolution(CurrentDeck.CardLayout.dpi, CurrentDeck.CardLayout.dpi); var xImage = XImage.FromGdiPlusImage(zBuffer); EvaluatePagePosition(nNextExportIndex); m_zPageGfx.DrawImage(xImage, m_dDrawX, m_dDrawY); MoveToNextColumnPosition(); // undo any export rotation ProcessRotateExport(zBuffer, CurrentDeck.CardLayout, true); nNextExportIndex++; zWait.ProgressStep(1); } zWait.ProgressStep(0); } #if !MONO_BUILD zBuffer?.Dispose(); #endif try { m_zDocument.Save(m_sExportFile); zWait.ThreadSuccess = true; } catch (Exception ex) { Logger.AddLogLine("Error saving PDF (is it open?) " + ex.Message); zWait.ThreadSuccess = false; } zWait.CloseWaitDialog(); }
public void ExportThread() { var zWait = WaitDialog.Instance; #if !MONO_BUILD Bitmap zBuffer = null; #endif zWait.ProgressReset(0, 0, ExportLayoutEndIndex - ExportLayoutStartIndex, 0); for (var nIdx = ExportLayoutStartIndex; nIdx < ExportLayoutEndIndex; nIdx++) { ChangeExportLayoutIndex(nIdx); zWait.ProgressReset(1, 0, CurrentDeck.CardCount, 0); ConfigurePointSizes(CurrentDeck.CardLayout); if (0 < nIdx) { if (CardMakerSettings.PrintLayoutsOnNewPage) { AddPage(); } if (CardMakerSettings.PrintAutoHorizontalCenter || (m_dDrawX + m_dLayoutPointWidth > m_dMarginEndX)) // this is the case where a layout won't fit in the remaining space of the row { MoveToNextRow(); } } // should be adjusted after the above move to next row m_dNextRowYAdjust = Math.Max(m_dNextRowYAdjust, m_dLayoutPointHeight + m_dBufferY); if (CardMakerSettings.PrintAutoHorizontalCenter) { CenterLayoutPositionOnNewRow(); } #if !MONO_BUILD if (null != zBuffer) { zBuffer.Dispose(); } zBuffer = new Bitmap(CurrentDeck.CardLayout.width, CurrentDeck.CardLayout.height); float fOriginalXDpi = zBuffer.HorizontalResolution; float fOriginalYDpi = zBuffer.VerticalResolution; #endif for (var nCardIdx = 0; nCardIdx < CurrentDeck.CardCount; nCardIdx++) { CurrentDeck.ResetDeckCache(); CurrentDeck.CardPrintIndex = nCardIdx; // minor optimization, reuse the same bitmap (for drawing sake the DPI has to be reset) #if MONO_BUILD Bitmap zBuffer = new Bitmap(CurrentDeck.CardLayout.width, CurrentDeck.CardLayout.height); #endif #if !MONO_BUILD zBuffer.SetResolution(fOriginalXDpi, fOriginalYDpi); #endif CardRenderer.DrawPrintLineToGraphics(Graphics.FromImage(zBuffer)); // apply any export rotation ProcessRotateExport(zBuffer, CurrentDeck.CardLayout, false); // before rendering to the PDF bump the DPI to the desired value zBuffer.SetResolution(CurrentDeck.CardLayout.dpi, CurrentDeck.CardLayout.dpi); var xImage = XImage.FromGdiPlusImage(zBuffer); EvaluatePagePosition(); m_zPageGfx.DrawImage(xImage, m_dDrawX, m_dDrawY); MoveToNextColumnPosition(); // undo any export rotation ProcessRotateExport(zBuffer, CurrentDeck.CardLayout, true); zWait.ProgressStep(1); } zWait.ProgressStep(0); } #if !MONO_BUILD if (null != zBuffer) { zBuffer.Dispose(); } #endif try { m_zDocument.Save(m_sExportFile); zWait.ThreadSuccess = true; } catch (Exception ex) { Logger.AddLogLine("Error saving PDF (is it open?) " + ex.Message); zWait.ThreadSuccess = false; } zWait.CloseWaitDialog(); }
public void ExportThread() { var zWait = WaitDialog.Instance; zWait.ProgressReset(0, 0, ExportLayoutEndIndex - ExportLayoutStartIndex, 0); ChangeExportLayoutIndex(ExportLayoutStartIndex); var nPadSize = CurrentDeck.CardCount.ToString(CultureInfo.InvariantCulture).Length; zWait.ProgressReset(1, 0, CurrentDeck.CardCount, 0); UpdateBufferBitmap(CurrentDeck.CardLayout.width, CurrentDeck.CardLayout.height); var zGraphics = Graphics.FromImage(m_zExportCardBuffer); var nCardIdx = m_nImageExportIndex; zGraphics.Clear(CurrentDeck.CardLayout.exportTransparentBackground ? CardMakerConstants.NoColor : Color.White); CurrentDeck.ResetDeckCache(); CurrentDeck.CardPrintIndex = nCardIdx++; CardRenderer.DrawPrintLineToGraphics(zGraphics, 0, 0, !CurrentDeck.CardLayout.exportTransparentBackground); m_zExportCardBuffer.SetResolution(CurrentDeck.CardLayout.dpi, CurrentDeck.CardLayout.dpi); zWait.ProgressStep(1); string sFileName; // NOTE: nCardIdx at this point is 1 more than the actual index ... how convenient for export file names... if (!string.IsNullOrEmpty(m_sOverrideStringFormat)) { // check for the super override sFileName = CurrentDeck.TranslateFileNameString(m_sOverrideStringFormat, nCardIdx, nPadSize); } else if (!string.IsNullOrEmpty(CurrentDeck.CardLayout.exportNameFormat)) { // check for the per layout override sFileName = CurrentDeck.TranslateFileNameString(CurrentDeck.CardLayout.exportNameFormat, nCardIdx, nPadSize); } else // default { sFileName = CurrentDeck.CardLayout.Name + "_" + (nCardIdx).ToString(CultureInfo.InvariantCulture).PadLeft(nPadSize, '0'); } try { ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, false); m_zExportCardBuffer.Save( m_sExportFolder + sFileName + "." + m_eImageFormat.ToString().ToLower(), m_eImageFormat); ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, true); } catch (Exception) { Logger.AddLogLine("Invalid Filename or IO error: " + sFileName); zWait.ThreadSuccess = false; zWait.CloseWaitDialog(); return; } zWait.ProgressStep(0); zWait.ThreadSuccess = true; zWait.CloseWaitDialog(); }
public override void ExportThread() { if (File.Exists(m_sExportFile)) { try { File.Delete(m_sExportFile); } catch (Exception) { ProgressReporter.AddIssue("Failed to delete PDF before export: {0}".FormatString(m_sExportFile)); } if (File.Exists(m_sExportFile)) { DisplayError(); ProgressReporter.Shutdown(); return; } } #if !MONO_BUILD Bitmap zBuffer = null; #endif var progressLayoutIdx = ProgressReporter.GetProgressIndex(ProgressName.LAYOUT); var progressCardIdx = ProgressReporter.GetProgressIndex(ProgressName.CARD); ProgressReporter.ProgressReset(progressLayoutIdx, 0, ExportLayoutIndices.Length, 0); foreach (var nIdx in ExportLayoutIndices) { ChangeExportLayoutIndex(nIdx); if (CurrentDeck.EmptyReference) { // empty reference layouts are not exported ProgressReporter.ProgressStep(progressLayoutIdx); continue; } ProgressReporter.ProgressReset(progressCardIdx, 0, CurrentDeck.CardCount, 0); var rectCrop = CurrentDeck.CardLayout.getExportCropDefinition(); ConfigurePointSizes(CurrentDeck.CardLayout, rectCrop); // necessary tracking for which index of the layout is to be exported (this is NOT necessarily the index of the card due to the page back functionality) var nNextExportIndex = 0; if (0 < nIdx) { if (CardMakerSettings.PrintLayoutsOnNewPage) { AddPage(); } if (CardMakerSettings.PrintAutoHorizontalCenter || (m_dDrawX + m_dLayoutPointWidth > m_dPageMarginEndX)) // this is the case where a layout won't fit in the remaining space of the row { MoveToNextRow(nNextExportIndex); } } // should be adjusted after the above move to next row m_dNextRowYAdjust = Math.Max(m_dNextRowYAdjust, m_dLayoutPointHeight + m_dBufferY); if (CardMakerSettings.PrintAutoHorizontalCenter) { CenterLayoutPositionOnNewRow(nNextExportIndex); } #if !MONO_BUILD zBuffer?.Dispose(); zBuffer = createExportBuffer(CurrentDeck.CardLayout, rectCrop); float fOriginalXDpi = zBuffer.HorizontalResolution; float fOriginalYDpi = zBuffer.VerticalResolution; #endif foreach (var nCardIdx in GetExportIndices()) { CurrentDeck.ResetDeckCache(); CurrentDeck.CardPrintIndex = nCardIdx; #if MONO_BUILD // mono build won't support the optimization so re-create the buffer Bitmap zBuffer = createExportBuffer(CurrentDeck.CardLayout, rectCrop); #endif #if !MONO_BUILD // minor optimization, reuse the same bitmap (for drawing sake the DPI has to be reset) zBuffer.SetResolution(fOriginalXDpi, fOriginalYDpi); #endif if (nCardIdx == -1) { Graphics.FromImage(zBuffer).FillRectangle(Brushes.White, 0, 0, zBuffer.Width, zBuffer.Height); // note: some oddities were observed where the buffer was not flood filling } else { CardRenderer.DrawPrintLineToGraphics(Graphics.FromImage(zBuffer), -rectCrop.X, -rectCrop.Y, true); // if cropping the border needs to be drawn to the cropped size if (rectCrop != Rectangle.Empty) { CardRenderer.DrawBorder(Graphics.FromImage(zBuffer), 0, 0, zBuffer.Width, zBuffer.Height, CurrentDeck.CardLayout, true); } } // apply any export rotation ProcessRotateExport(zBuffer, CurrentDeck.CardLayout, false); // before rendering to the PDF bump the DPI to the desired value zBuffer.SetResolution(CurrentDeck.CardLayout.dpi, CurrentDeck.CardLayout.dpi); var xImage = XImage.FromGdiPlusImage(zBuffer); EvaluatePagePosition(nNextExportIndex); m_zPageGfx.DrawImage(xImage, m_dDrawX, m_dDrawY); MoveToNextColumnPosition(); // undo any export rotation ProcessRotateExport(zBuffer, CurrentDeck.CardLayout, true); nNextExportIndex++; ProgressReporter.ProgressStep(progressCardIdx); } ProgressReporter.ProgressStep(progressLayoutIdx); } #if !MONO_BUILD zBuffer?.Dispose(); #endif try { m_zDocument.Save(m_sExportFile); ProgressReporter.ThreadSuccess = true; } catch (Exception ex) { DisplayError(ex.Message); ProgressReporter.ThreadSuccess = false; } ProgressReporter.Shutdown(); }
public override void ExportThread() { var progressLayoutIdx = ProgressReporter.GetProgressIndex(ProgressName.LAYOUT); var progressCardIdx = ProgressReporter.GetProgressIndex(ProgressName.CARD); ProgressReporter.ProgressReset(progressLayoutIdx, 0, ExportLayoutIndices.Length, 0); foreach (var nIdx in ExportLayoutIndices) { ChangeExportLayoutIndex(nIdx); if (CurrentDeck.EmptyReference) { // empty reference layouts are not exported ProgressReporter.ProgressStep(progressLayoutIdx); continue; } var nPadSize = CurrentDeck.CardCount.ToString(CultureInfo.InvariantCulture).Length; ProgressReporter.ProgressReset(progressCardIdx, 0, CurrentDeck.CardCount, 0); var exportWidth = CurrentDeck.CardLayout.exportWidth == 0 ? CurrentDeck.CardLayout.width : CurrentDeck.CardLayout.exportWidth; var exportHeight = CurrentDeck.CardLayout.exportHeight == 0 ? CurrentDeck.CardLayout.height : CurrentDeck.CardLayout.exportHeight; if (CurrentDeck.CardLayout.width > exportWidth || CurrentDeck.CardLayout.height > exportHeight) { Logger.AddLogLine( $"ERROR: Layout: [{CurrentDeck.CardLayout.Name}] exportWidth and/or exportHeight too small! (Skipping export)"); continue; } UpdateBufferBitmap(exportWidth, exportHeight); var zGraphics = Graphics.FromImage(m_zExportCardBuffer); var arrayCardIndices = GetCardIndicesArray(CurrentDeck); for (var nCardArrayIdx = 0; nCardArrayIdx < arrayCardIndices.Length; nCardArrayIdx++) { var nCardId = arrayCardIndices[nCardArrayIdx]; var nX = 0; var nY = 0; var nCardsExportedInImage = 0; zGraphics.Clear(CurrentDeck.CardLayout.exportTransparentBackground ? CardMakerConstants.NoColor : Color.White); do { CurrentDeck.ResetDeckCache(); // HACK - the printcard index is 0 based but all other uses of nCardId are 1 based (so ++ it!) CurrentDeck.CardPrintIndex = nCardId++; nCardsExportedInImage++; CardRenderer.DrawPrintLineToGraphics(zGraphics, nX, nY, !CurrentDeck.CardLayout.exportTransparentBackground); m_zExportCardBuffer.SetResolution(CurrentDeck.CardLayout.dpi, CurrentDeck.CardLayout.dpi); ProgressReporter.ProgressStep(progressCardIdx); int nMoveCount = 1; if (m_nSkipStitchIndex > 0) { var x = ((nCardsExportedInImage + 1) % m_nSkipStitchIndex); if (x == 0) { // shift forward an extra spot to ignore the dummy index nMoveCount = 2; } } var bOutOfSpace = false; for (int nShift = 0; nShift < nMoveCount; nShift++) { nX += CurrentDeck.CardLayout.width + CurrentDeck.CardLayout.buffer; if (nX + CurrentDeck.CardLayout.width > exportWidth) { nX = 0; nY += CurrentDeck.CardLayout.height + CurrentDeck.CardLayout.buffer; } if (nY + CurrentDeck.CardLayout.height > exportHeight) { // no more space bOutOfSpace = true; break; } } if (bOutOfSpace) { break; } } while (nCardArrayIdx < CurrentDeck.CardCount); string sFileName; // NOTE: nCardId at this point is 1 more than the actual index ... how convenient for export file names... if (!string.IsNullOrEmpty(m_sOverrideStringFormat)) { // check for the super override sFileName = CurrentDeck.TranslateFileNameString(m_sOverrideStringFormat, nCardId, nPadSize); } else if (!string.IsNullOrEmpty(CurrentDeck.CardLayout.exportNameFormat)) { // check for the per layout override sFileName = CurrentDeck.TranslateFileNameString(CurrentDeck.CardLayout.exportNameFormat, nCardId, nPadSize); } else // default { sFileName = CurrentDeck.CardLayout.Name + "_" + (nCardId).ToString(CultureInfo.InvariantCulture).PadLeft(nPadSize, '0'); } try { ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, false); m_zExportCardBuffer.Save( m_sExportFolder + sFileName + "." + m_eImageFormat.ToString().ToLower(), m_eImageFormat); ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, true); } catch (Exception ex) { ProgressReporter.AddIssue("Invalid Filename or IO error: " + sFileName + " :: " + ex.Message); ProgressReporter.ThreadSuccess = false; ProgressReporter.Shutdown(); return; } } ProgressReporter.ProgressStep(progressLayoutIdx); } ProgressReporter.ThreadSuccess = true; ProgressReporter.Shutdown(); }
public override void ExportThread() { var progressLayoutIdx = ProgressReporter.GetProgressIndex(ProgressName.LAYOUT); var progressCardIdx = ProgressReporter.GetProgressIndex(ProgressName.CARD); ProgressReporter.ProgressReset(progressLayoutIdx, 0, ExportLayoutIndices.Length, 0); ChangeExportLayoutIndex(ExportLayoutIndices[0]); var nPadSize = CurrentDeck.CardCount.ToString(CultureInfo.InvariantCulture).Length; ProgressReporter.ProgressReset(progressCardIdx, 0, CurrentDeck.CardCount, 0); UpdateBufferBitmap(CurrentDeck.CardLayout.width, CurrentDeck.CardLayout.height); var zGraphics = Graphics.FromImage(m_zExportCardBuffer); var nCardIdx = m_nImageExportIndex; zGraphics.Clear(CurrentDeck.CardLayout.exportTransparentBackground ? CardMakerConstants.NoColor : Color.White); CurrentDeck.ResetDeckCache(); CurrentDeck.CardPrintIndex = nCardIdx++; CardRenderer.DrawPrintLineToGraphics(zGraphics, 0, 0, !CurrentDeck.CardLayout.exportTransparentBackground); m_zExportCardBuffer.SetResolution(CurrentDeck.CardLayout.dpi, CurrentDeck.CardLayout.dpi); ProgressReporter.ProgressStep(progressCardIdx); string sFileName; // NOTE: nCardIdx at this point is 1 more than the actual index ... how convenient for export file names... if (!string.IsNullOrEmpty(m_sOverrideStringFormat)) { // check for the super override sFileName = CurrentDeck.TranslateFileNameString(m_sOverrideStringFormat, nCardIdx, nPadSize); } else if (!string.IsNullOrEmpty(CurrentDeck.CardLayout.exportNameFormat)) { // check for the per layout override sFileName = CurrentDeck.TranslateFileNameString(CurrentDeck.CardLayout.exportNameFormat, nCardIdx, nPadSize); } else // default { sFileName = CurrentDeck.CardLayout.Name + "_" + (nCardIdx).ToString(CultureInfo.InvariantCulture).PadLeft(nPadSize, '0'); } try { ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, false); m_zExportCardBuffer.Save( m_sExportFolder + sFileName + "." + m_eImageFormat.ToString().ToLower(), m_eImageFormat); ProcessRotateExport(m_zExportCardBuffer, CurrentDeck.CardLayout, true); } catch (Exception e) { ProgressReporter.AddIssue("Invalid Filename or IO error: {0} {1}".FormatString(sFileName, e.Message)); ProgressReporter.ThreadSuccess = false; ProgressReporter.Shutdown(); return; } ProgressReporter.ProgressStep(progressLayoutIdx); ProgressReporter.ThreadSuccess = true; ProgressReporter.Shutdown(); }